Skip to content

Instantly share code, notes, and snippets.

@leizongmin
Last active March 23, 2017 05:29
Show Gist options
  • Save leizongmin/39a973f09057ad1849b48a7ba6d34cbe to your computer and use it in GitHub Desktop.
Save leizongmin/39a973f09057ad1849b48a7ba6d34cbe to your computer and use it in GitHub Desktop.
Test Node.js Promise
$ time node test-promise-2
exec Promise.resolve() 100000 times
Node.js v4.8.1, native Promise
test: 496ms
0.58 real 0.50 user 0.08 sys
$ time node test-promise-2 bluebird
exec Promise.resolve() 100000 times
Node.js v4.8.1, bluebird Promise
test: 61ms
0.17 real 0.14 user 0.02 sys
$ time node test-promise-2 q
exec Promise.resolve() 100000 times
Node.js v4.8.1, q Promise
test: 2199ms
2.32 real 2.12 user 0.20 sys
------------------------------------------------
$ time node test-promise-2
exec Promise.resolve() 100000 times
Node.js v6.10.1, native Promise
test: 670.161ms
0.76 real 0.68 user 0.08 sys
$ time node test-promise-2 bluebird
exec Promise.resolve() 100000 times
Node.js v6.10.1, bluebird Promise
test: 70.248ms
0.18 real 0.16 user 0.02 sys
$ time node test-promise-2 q
exec Promise.resolve() 100000 times
Node.js v6.10.1, q Promise
test: 1761.544ms
1.89 real 1.71 user 0.19 sys
------------------------------------------------
$ time node test-promise-2
exec Promise.resolve() 100000 times
Node.js v7.7.4, native Promise
test: 208.804ms
0.28 real 0.23 user 0.05 sys
$ time node test-promise-2 bluebird
exec Promise.resolve() 100000 times
Node.js v7.7.4, bluebird Promise
test: 99.997ms
0.20 real 0.18 user 0.03 sys
$ time node test-promise-2 q
exec Promise.resolve() 100000 times
Node.js v7.7.4, q Promise
test: 1384.565ms
1.54 real 1.37 user 0.20 sys
'use strict';
let promiseModule = 'native';
if (process.argv[2]) {
promiseModule = process.argv[2];
global.Promise = require(promiseModule);
}
function test(n) {
return Promise.resolve(n + 1);
}
console.time('test');
const times = 100000;
let p = test(1);
for (let i = 0; i < times; i++) {
p = p.then(test);
}
console.log('exec Promise.resolve() %s times', times);
console.log('Node.js %s, %s Promise', process.version, promiseModule);
p.then(n => {
console.timeEnd('test');
});
$ time node test-promise
exec Promise.reject() 100000 times
Node.js v4.8.1, native Promise
test: 1165ms
22.27 real 21.97 user 0.19 sys
$ time node test-promise bluebird
exec Promise.reject() 100000 times
Node.js v4.8.1, bluebird Promise
test: 726ms
0.84 real 0.79 user 0.05 sys
$ time node test-promise q
exec Promise.reject() 100000 times
Node.js v4.8.1, q Promise
test: 7770ms
7.96 real 7.61 user 0.34 sys
------------------------------------------------
$ time node test-promise
exec Promise.reject() 100000 times
Node.js v6.10.1, native Promise
test: 1300.541ms
41.24 real 40.82 user 0.25 sys
$ time node test-promise bluebird
exec Promise.reject() 100000 times
Node.js v6.10.1, bluebird Promise
test: 725.487ms
0.85 real 0.79 user 0.06 sys
$ time node test-promise q
exec Promise.reject() 100000 times
Node.js v6.10.1, q Promise
test: 6823.676ms
6.99 real 6.79 user 0.28 sys
------------------------------------------------
$ time node test-promise
exec Promise.reject() 100000 times
Node.js v7.7.4, native Promise
test: 764.782ms
49.57 real 49.10 user 0.28 sys
$ time node test-promise bluebird
exec Promise.reject() 100000 times
Node.js v7.7.4, bluebird Promise
test: 11907.472ms
12.08 real 12.07 user 0.34 sys
$ time node test-promise q
exec Promise.reject() 100000 times
Node.js v7.7.4, q Promise
test: 7168.753ms
7.36 real 7.14 user 0.43 sys
'use strict';
let promiseModule = 'native';
if (process.argv[2]) {
promiseModule = process.argv[2];
global.Promise = require(promiseModule);
}
function test() {
return Promise.reject(new Error('test'));
}
console.time('test');
const times = 100000;
let p = test();
for (let i = 0; i < times; i++) {
p = p.catch(test);
}
console.log('exec Promise.reject() %s times', times);
console.log('Node.js %s, %s Promise', process.version, promiseModule);
p.catch(err => {
console.timeEnd('test');
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment