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

Исходный код бенчмарка (вариант №1):
Исходный код бенчмарка (вариант №2):
Данный бенчмарк в качестве результата выводит время, за которое резолвятся все промисы. Результаты бенчмарка на моей машине:
Время выполнения:
Максимальное значение выделенной памяти (rss):
Среднее значение выделенной памяти (rss):
Вывод: bluebird промисы работают быстрее нативных промисов в 2-5 раз, а так же требуют гораздо меньше оперативной памяти.
Если я в чем то ошибаюсь, то большая просьба сообщить в комментариях. Буду очень рад услышать от вас, какие либо поправки.
» Ссылка на библиотеку bluebird

Исходный код бенчмарка (вариант №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
