diff options
author | Brian White <mscdex@mscdex.net> | 2019-01-11 22:36:26 -0500 |
---|---|---|
committer | Brian White <mscdex@mscdex.net> | 2019-08-27 22:14:15 -0400 |
commit | 34961c7b5fe8b2cf1722668666a7adcce3ab419c (patch) | |
tree | bf04b476c439f92a7b80ccdbd8cb280704542de9 /lib/internal/process/task_queues.js | |
parent | 01504904f3b220b68666d9c2d37e13615e0a2fc1 (diff) | |
download | android-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.js | 42 |
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; |