Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Runs some simple performance tests on Node for Native Promises, Zousan and Bluebird. (See Issue 5 : https://github.com/bluejava/zousan/issues/5)
var batchSize = 1000,
doBluebirdAll = true,
doZousanAll = true,
doNativeAll = true,
doBluebirdSeries = true,
doZousanSeries = true,
doNativeSeries = true
console.log(" - Batch Size: " + batchSize)
var Zousan = require("zousan"),
Bluebird = require('bluebird'),
promiseName = null,
PromiseImpl = null,
bp = Zousan.resolve(1)
if(doBluebirdAll)
bp = bp.then(function() {
promiseName = "Bluebird-All"
PromiseImpl = Bluebird
return testAll()
.then(testAll)
.then(testAll)
.then(testAll)
.then(testAll)
})
if(doZousanAll)
bp = bp.then(function() {
promiseName = "Zousan-All"
PromiseImpl = Zousan
return testAll()
.then(testAll)
.then(testAll)
.then(testAll)
.then(testAll)
})
if(doNativeAll)
bp = bp.then(function() {
promiseName = "Native-All"
PromiseImpl = Promise
return testAll()
.then(testAll)
.then(testAll)
.then(testAll)
.then(testAll)
})
if(doBluebirdSeries)
bp = bp.then(function() {
promiseName = "Bluebird-Series"
PromiseImpl = Bluebird
return testSeries()
.then(testSeries)
.then(testSeries)
.then(testSeries)
.then(testSeries)
})
if(doZousanSeries)
bp = bp.then(function() {
promiseName = "Zousan-Series"
PromiseImpl = Zousan
return testSeries()
.then(testSeries)
.then(testSeries)
.then(testSeries)
.then(testSeries)
})
if(doNativeSeries)
bp = bp.then(function() {
promiseName = "Native-Series"
PromiseImpl = Promise
return testSeries()
.then(testSeries)
.then(testSeries)
.then(testSeries)
.then(testSeries)
})
bp.then(showAverages)
// ---------------------- The Test Routines ------------------
function testAll()
{
var items = [];
timeStart(promiseName);
for(var i = 0; i < batchSize; i++) {
items.push(new PromiseImpl(function(resolve, reject) {
resolve({time: process.hrtime()} )
}));
}
var done = PromiseImpl.all(items)
done.then((res) => { timeEnd(promiseName) })
return done
}
function testSeries()
{
timeStart(promiseName);
var p = testSeries2(0)
p.then(() => { timeEnd(promiseName) })
return p
}
function testSeries2(i)
{
if(i == batchSize)
return PromiseImpl.resolve(1)
return new PromiseImpl(function(resolve, reject) {
resolve(i)
}).then(function() { return testSeries2(i+1) })
}
// ---------------------- Some Utility Functions ------------------
function log() {
for(a in arguments) console.log(arguments[a])
}
var current = {}, history = {}
function timeStart(label)
{
console.log("Starting " + label)
current[label] =process.hrtime()
}
function timeEnd(label)
{
var diff = process.hrtime(current[label]),
totalTime = (diff[0] * 1e9 + diff[1]) / 1e6,
historyItem = history[label]
if(!historyItem)
{
historyItem = { reps: 0, total: 0 }
history[label] = historyItem
}
historyItem.reps++
historyItem.total += totalTime
console.log(label + ": " + totalTime + "ms")
}
function showAverages()
{
for(label in history)
console.log(label + " - Average runtime for " + history[label].reps + " repititions = " + Math.round(history[label].total * 100 / history[label].reps) / 100 + "ms")
return true
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.