From 6ef29038cc91a6c532b0ef100683c4e686d191d7 Mon Sep 17 00:00:00 2001 From: Yang Guo Date: Mon, 3 Apr 2017 13:44:58 +0200 Subject: [PATCH 1/3] process: use rest parameters in nextTick. This increases the performance of stream/writeable-manywrites.js both with Crankshaft and with Turbofan significantly. --- lib/internal/process/next_tick.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/lib/internal/process/next_tick.js b/lib/internal/process/next_tick.js index ad635aaf494b33..6df56f796362b8 100644 --- a/lib/internal/process/next_tick.js +++ b/lib/internal/process/next_tick.js @@ -137,20 +137,13 @@ function setupNextTick() { } while (tickInfo[kLength] !== 0); } - function nextTick(callback) { + function nextTick(callback, ...args) { if (typeof callback !== 'function') throw new TypeError('callback is not a function'); // on the way out, don't bother. it won't get fired anyway. if (process._exiting) return; - var args; - if (arguments.length > 1) { - args = new Array(arguments.length - 1); - for (var i = 1; i < arguments.length; i++) - args[i - 1] = arguments[i]; - } - nextTickQueue.push({ callback, domain: process.domain || null, From 00f6065e963692d3ccf596610edc427b227747d4 Mon Sep 17 00:00:00 2001 From: Yang Guo Date: Mon, 3 Apr 2017 15:10:13 +0200 Subject: [PATCH 2/3] Fix usage of arguments. --- lib/internal/process/next_tick.js | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/lib/internal/process/next_tick.js b/lib/internal/process/next_tick.js index 6df56f796362b8..632d57120ffcb3 100644 --- a/lib/internal/process/next_tick.js +++ b/lib/internal/process/next_tick.js @@ -69,22 +69,21 @@ function setupNextTick() { } function _combinedTickCallback(args, callback) { - if (args === undefined) { - callback(); - } else { - 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; - default: - callback.apply(null, args); - } + switch (args.length) { + case 0: + callback(); + break; + case 1: + callback(args[0]); + break; + case 2: + callback(args[0], args[1]); + break; + case 3: + callback(args[0], args[1], args[2]); + break; + default: + callback.apply(null, args); } } From f70c9004f3ff6128d251bb64805ee5ab846ba1de Mon Sep 17 00:00:00 2001 From: Yang Guo Date: Thu, 6 Apr 2017 09:24:03 +0200 Subject: [PATCH 3/3] Fix undefined case. --- lib/internal/process/next_tick.js | 34 +++++++++++++++++-------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/lib/internal/process/next_tick.js b/lib/internal/process/next_tick.js index 632d57120ffcb3..290888bf5b1b16 100644 --- a/lib/internal/process/next_tick.js +++ b/lib/internal/process/next_tick.js @@ -69,21 +69,25 @@ function setupNextTick() { } function _combinedTickCallback(args, callback) { - switch (args.length) { - case 0: - callback(); - break; - case 1: - callback(args[0]); - break; - case 2: - callback(args[0], args[1]); - break; - case 3: - callback(args[0], args[1], args[2]); - break; - default: - callback.apply(null, args); + if (args === undefined) { + callback(); + } else { + switch (args.length) { + case 0: + callback(); + break; + case 1: + callback(args[0]); + break; + case 2: + callback(args[0], args[1]); + break; + case 3: + callback(args[0], args[1], args[2]); + break; + default: + callback.apply(null, args); + } } }