summaryrefslogtreecommitdiff
path: root/lib/internal/process/task_queues.js
diff options
context:
space:
mode:
authorBrian White <mscdex@mscdex.net>2019-01-11 22:36:26 -0500
committerBrian White <mscdex@mscdex.net>2019-08-27 22:14:15 -0400
commit34961c7b5fe8b2cf1722668666a7adcce3ab419c (patch)
treebf04b476c439f92a7b80ccdbd8cb280704542de9 /lib/internal/process/task_queues.js
parent01504904f3b220b68666d9c2d37e13615e0a2fc1 (diff)
downloadandroid-node-v8-34961c7b5fe8b2cf1722668666a7adcce3ab419c.tar.gz
android-node-v8-34961c7b5fe8b2cf1722668666a7adcce3ab419c.tar.bz2
android-node-v8-34961c7b5fe8b2cf1722668666a7adcce3ab419c.zip
process: improve nextTick performance
PR-URL: https://github.com/nodejs/node/pull/25461 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'lib/internal/process/task_queues.js')
-rw-r--r--lib/internal/process/task_queues.js42
1 files changed, 22 insertions, 20 deletions
diff --git a/lib/internal/process/task_queues.js b/lib/internal/process/task_queues.js
index 68b5d8b343..8906b4aa1e 100644
--- a/lib/internal/process/task_queues.js
+++ b/lib/internal/process/task_queues.js
@@ -71,10 +71,18 @@ function processTicksAndRejections() {
try {
const callback = tock.callback;
- if (tock.args === undefined)
+ if (tock.args === undefined) {
callback();
- else
- callback(...tock.args);
+ } else {
+ const args = tock.args;
+ switch (args.length) {
+ case 1: callback(args[0]); break;
+ case 2: callback(args[0], args[1]); break;
+ case 3: callback(args[0], args[1], args[2]); break;
+ case 4: callback(args[0], args[1], args[2], args[3]); break;
+ default: callback(...args);
+ }
+ }
} finally {
if (destroyHooksExist())
emitDestroy(asyncId);
@@ -88,22 +96,6 @@ function processTicksAndRejections() {
setHasRejectionToWarn(false);
}
-class TickObject {
- constructor(callback, args) {
- this.callback = callback;
- this.args = args;
-
- const asyncId = newAsyncId();
- const triggerAsyncId = getDefaultTriggerAsyncId();
- this[async_id_symbol] = asyncId;
- this[trigger_async_id_symbol] = triggerAsyncId;
-
- if (initHooksExist()) {
- emitInit(asyncId, 'TickObject', triggerAsyncId, this);
- }
- }
-}
-
// `nextTick()` will not enqueue any callback when the process is about to
// exit since the callback would not have a chance to be executed.
function nextTick(callback) {
@@ -127,7 +119,17 @@ function nextTick(callback) {
if (queue.isEmpty())
setHasTickScheduled(true);
- queue.push(new TickObject(callback, args));
+ const asyncId = newAsyncId();
+ const triggerAsyncId = getDefaultTriggerAsyncId();
+ const tickObject = {
+ [async_id_symbol]: asyncId,
+ [trigger_async_id_symbol]: triggerAsyncId,
+ callback,
+ args
+ };
+ if (initHooksExist())
+ emitInit(asyncId, 'TickObject', triggerAsyncId, tickObject);
+ queue.push(tickObject);
}
let AsyncResource;