90 lines
1.8 KiB
JavaScript
90 lines
1.8 KiB
JavaScript
var immediate = require('./lib/index');
|
|
|
|
function bench (num, done) {
|
|
var i = 1e3;
|
|
var time = process.hrtime();
|
|
function next(i) {
|
|
var total = 50000;
|
|
var todo = total;
|
|
function nextInt1() {
|
|
if (--todo !== 0) {
|
|
return;
|
|
}
|
|
immediate(next, i -1);
|
|
}
|
|
function nextInt2() {
|
|
if (--todo !== 0) {
|
|
return;
|
|
}
|
|
immediate(next, i -1);
|
|
}
|
|
function nextInt3() {
|
|
if (--todo !== 0) {
|
|
return;
|
|
}
|
|
immediate(next, i -1);
|
|
}
|
|
function nextInt4() {
|
|
if (--todo !== 0) {
|
|
return;
|
|
}
|
|
immediate(next, i -1);
|
|
}
|
|
function nextInt5() {
|
|
if (--todo !== 0) {
|
|
return;
|
|
}
|
|
immediate(next, i -1);
|
|
}
|
|
if (i > 0) {
|
|
var j = 0;
|
|
while (j++ < total) {
|
|
switch (j % 5) {
|
|
case 0:
|
|
immediate(nextInt1);
|
|
break;
|
|
case 1:
|
|
immediate(nextInt2, 'arg');
|
|
break;
|
|
case 2:
|
|
immediate(nextInt3, 'arg', 'another arg');
|
|
break;
|
|
case 3:
|
|
immediate(nextInt4, 'arg', 'another arg', 'third arg');
|
|
break;
|
|
case 4:
|
|
immediate(nextInt5, 'arg', 'another arg', 'third arg', '4th arg');
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
after();
|
|
}
|
|
}
|
|
|
|
immediate(next, i);
|
|
function after() {
|
|
var diff = process.hrtime(time);
|
|
var units = 'nanoseconds';
|
|
var diftime = diff[0] * 1e9 + diff[1];
|
|
if (diftime > 1e6) {
|
|
diftime /= 1e6;
|
|
units = 'milliseconds';
|
|
}
|
|
if (diftime > 1000) {
|
|
diftime /= 1000;
|
|
units = 'seconds';
|
|
}
|
|
console.log(`Benchmark ${num < 10 ? ('0' + num): num} took ${diftime.toFixed(4)} ${units}`);
|
|
done(num);
|
|
}
|
|
}
|
|
var runs = 20;
|
|
function afterRun(num) {
|
|
if (num === runs) {
|
|
return;
|
|
}
|
|
bench(num + 1, afterRun);
|
|
}
|
|
afterRun(0);
|