mirror of
https://github.com/nodejs/node.git
synced 2025-05-03 13:28:42 +00:00

In order to better match the browser behaviour, run nextTicks (and subsequently the microtask queue) after each individual Timer and Immediate, rather than after the whole list is processed. The current behaviour is somewhat of a performance micro-optimization and also partly dictated by how timer handles were implemented. PR-URL: https://github.com/nodejs/node/pull/22842 Fixes: https://github.com/nodejs/node/issues/22257 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
37 lines
816 B
JavaScript
37 lines
816 B
JavaScript
'use strict';
|
|
const common = require('../common.js');
|
|
|
|
// The following benchmark measures setting up n * 1e6 timeouts,
|
|
// as well as scheduling a next tick from each timeout. Those
|
|
// then get executed on the next uv tick.
|
|
|
|
const bench = common.createBenchmark(main, {
|
|
n: [5e4, 5e6],
|
|
});
|
|
|
|
function main({ n }) {
|
|
let count = 0;
|
|
|
|
// Function tracking on the hidden class in V8 can cause misleading
|
|
// results in this benchmark if only a single function is used —
|
|
// alternate between two functions for a fairer benchmark.
|
|
|
|
function cb() {
|
|
process.nextTick(counter);
|
|
}
|
|
function cb2() {
|
|
process.nextTick(counter);
|
|
}
|
|
function counter() {
|
|
count++;
|
|
if (count === n)
|
|
bench.end(n);
|
|
}
|
|
|
|
for (var i = 0; i < n; i++) {
|
|
setTimeout(i % 2 ? cb : cb2, 1);
|
|
}
|
|
|
|
bench.start();
|
|
}
|