Pull to refresh

Проверяем скорость работы промисов

JavaScript *Node.JS *
Sandbox
В этой статье решил выложить довольно интересные, на мой взгляд, результаты бенчмарка собственного производства. Данный бенчмарк создан с целью выяснить скорость работы нативных и bluebird-промисов.

image


Исходный код бенчмарка (вариант №1):

var Promise = require('bluebird'); // Если хотите проверить скорость работы нативных промисов то необходимо закомментировать данную строку.
var crypto = require('crypto');
var iterations = 1000000;
var start = Date.now();
var arrayPromises = [];
var promiseWrap = function () {
    return new Promise(function (resolve, reject) {
        crypto.randomBytes(256, (err, buf) => {
            if (err) reject(err);
            resolve(buf);
        });
    });
};
for(var i = 0; i < iterations; i++){
    arrayPromises.push(promiseWrap());
}

if(arrayPromises.length === iterations){
    Promise.all(arrayPromises).then(function (result) {
        var finish = Date.now()-start;
        console.log("Бенчмарк промисов выполнен!");
        console.log("Время выполнения "+finish/1000+" сек.");
    });
}


Исходный код бенчмарка (вариант №2):

var Promise = require('bluebird'); // Если хотите проверить скорость работы нативных промисов то необходимо закомментировать данную строку.
var crypto = require('crypto');
var iterations = 1000000;
var start = Date.now();
var arrayPromises = [];
var promiseWrap = function () {
  return new Promise(function (resolve, reject) {
      setTimeout(function () {
          resolve(Math.random(1));
      },0)
  });
};
for(var i = 0; i < iterations; i++){
    arrayPromises.push(promiseWrap());
}

if(arrayPromises.length === iterations){
    Promise.all(arrayPromises).then(function (result) {
        var finish = Date.now()-start;
        console.log("Бенчмарк промисов выполнен!");
        console.log("Время выполнения "+finish/1000+" сек.");
    });
}


Данный бенчмарк в качестве результата выводит время, за которое резолвятся все промисы. Результаты бенчмарка на моей машине:

Время выполнения:
Нативные промисы (вариант №1 node v6.4.0) — 19.808 сек.
Bluebird-промисы (вариант №1 node v6.4.0) — 9.654 сек.
Нативные промисы (вариант №1 node v6.5.0) — 19.957 сек.
Bluebird-промисы (вариант №1 node v6.5.0) — 9.723 сек.
Нативные промисы (вариант №2 node v6.5.0) — 10.61 сек.
Bluebird-промисы (вариант №2 node v6.5.0) — 2.208 сек.


Максимальное значение выделенной памяти (rss):
Нативные промисы (вариант №2 node v6.5.0) — 1282 Мб.
Bluebird-промисы (вариант №2 node v6.5.0) — 601 Мб.


Среднее значение выделенной памяти (rss):
Нативные промисы (вариант №2 node v6.5.0) — 368 Мб.
Bluebird-промисы (вариант №2 node v6.5.0) — 297 Мб.


Вывод: bluebird промисы работают быстрее нативных промисов в 2-5 раз, а так же требуют гораздо меньше оперативной памяти.

Если я в чем то ошибаюсь, то большая просьба сообщить в комментариях. Буду очень рад услышать от вас, какие либо поправки.

» Ссылка на библиотеку bluebird
Tags:
Hubs:
Total votes 30: ↑26 and ↓4 +22
Views 10K
Comments Comments 27