-
Notifications
You must be signed in to change notification settings - Fork 29.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
timers: run nextTicks after each immediate and timer
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: #22842 Fixes: #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>
- Loading branch information
1 parent
20373c4
commit 52428c8
Showing
13 changed files
with
162 additions
and
158 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
'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(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.