mirror of https://github.com/nodejs/node.git
timers: optimize timer functions with improved argument handling
PR-URL: https://github.com/nodejs/node/pull/57072 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Chemi Atlow <chemi@atlow.co.il> Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
parent
595e9e5ad6
commit
8f7debcf41
|
@ -22,7 +22,6 @@
|
|||
'use strict';
|
||||
|
||||
const {
|
||||
ArrayPrototypePush,
|
||||
MathTrunc,
|
||||
ObjectDefineProperties,
|
||||
ObjectDefineProperty,
|
||||
|
@ -131,38 +130,13 @@ function enroll(item, msecs) {
|
|||
* after `after` milliseconds.
|
||||
* @param {Function} callback
|
||||
* @param {number} [after]
|
||||
* @param {any} [arg1]
|
||||
* @param {any} [arg2]
|
||||
* @param {any} [arg3]
|
||||
* @param {...any} [args]
|
||||
* @returns {Timeout}
|
||||
*/
|
||||
function setTimeout(callback, after, arg1, arg2, arg3) {
|
||||
function setTimeout(callback, after, ...args) {
|
||||
validateFunction(callback, 'callback');
|
||||
|
||||
let i, args;
|
||||
switch (arguments.length) {
|
||||
// fast cases
|
||||
case 1:
|
||||
case 2:
|
||||
break;
|
||||
case 3:
|
||||
args = [arg1];
|
||||
break;
|
||||
case 4:
|
||||
args = [arg1, arg2];
|
||||
break;
|
||||
default:
|
||||
args = [arg1, arg2, arg3];
|
||||
for (i = 5; i < arguments.length; i++) {
|
||||
// Extend array dynamically, makes .apply run much faster in v6.0.0
|
||||
ArrayPrototypePush(args, arguments[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
const timeout = new Timeout(callback, after, args, false, true);
|
||||
const timeout = new Timeout(callback, after, args.length ? args : undefined, false, true);
|
||||
insert(timeout, timeout._idleTimeout);
|
||||
|
||||
return timeout;
|
||||
}
|
||||
|
||||
|
@ -200,38 +174,13 @@ function clearTimeout(timer) {
|
|||
* every `repeat` milliseconds.
|
||||
* @param {Function} callback
|
||||
* @param {number} [repeat]
|
||||
* @param {any} [arg1]
|
||||
* @param {any} [arg2]
|
||||
* @param {any} [arg3]
|
||||
* @param {...any} [args]
|
||||
* @returns {Timeout}
|
||||
*/
|
||||
function setInterval(callback, repeat, arg1, arg2, arg3) {
|
||||
function setInterval(callback, repeat, ...args) {
|
||||
validateFunction(callback, 'callback');
|
||||
|
||||
let i, args;
|
||||
switch (arguments.length) {
|
||||
// fast cases
|
||||
case 1:
|
||||
case 2:
|
||||
break;
|
||||
case 3:
|
||||
args = [arg1];
|
||||
break;
|
||||
case 4:
|
||||
args = [arg1, arg2];
|
||||
break;
|
||||
default:
|
||||
args = [arg1, arg2, arg3];
|
||||
for (i = 5; i < arguments.length; i++) {
|
||||
// Extend array dynamically, makes .apply run much faster in v6.0.0
|
||||
ArrayPrototypePush(args, arguments[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
const timeout = new Timeout(callback, repeat, args, true, true);
|
||||
const timeout = new Timeout(callback, repeat, args.length ? args : undefined, true, true);
|
||||
insert(timeout, timeout._idleTimeout);
|
||||
|
||||
return timeout;
|
||||
}
|
||||
|
||||
|
@ -273,35 +222,12 @@ Timeout.prototype[SymbolToPrimitive] = function() {
|
|||
* Schedules the immediate execution of `callback`
|
||||
* after I/O events' callbacks.
|
||||
* @param {Function} callback
|
||||
* @param {any} [arg1]
|
||||
* @param {any} [arg2]
|
||||
* @param {any} [arg3]
|
||||
* @param {...any} [args]
|
||||
* @returns {Immediate}
|
||||
*/
|
||||
function setImmediate(callback, arg1, arg2, arg3) {
|
||||
function setImmediate(callback, ...args) {
|
||||
validateFunction(callback, 'callback');
|
||||
|
||||
let i, args;
|
||||
switch (arguments.length) {
|
||||
// fast cases
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
args = [arg1];
|
||||
break;
|
||||
case 3:
|
||||
args = [arg1, arg2];
|
||||
break;
|
||||
default:
|
||||
args = [arg1, arg2, arg3];
|
||||
for (i = 4; i < arguments.length; i++) {
|
||||
// Extend array dynamically, makes .apply run much faster in v6.0.0
|
||||
ArrayPrototypePush(args, arguments[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return new Immediate(callback, args);
|
||||
return new Immediate(callback, args.length ? args : undefined);
|
||||
}
|
||||
|
||||
ObjectDefineProperty(setImmediate, customPromisify, {
|
||||
|
|
Loading…
Reference in New Issue