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';
|
'use strict';
|
||||||
|
|
||||||
const {
|
const {
|
||||||
ArrayPrototypePush,
|
|
||||||
MathTrunc,
|
MathTrunc,
|
||||||
ObjectDefineProperties,
|
ObjectDefineProperties,
|
||||||
ObjectDefineProperty,
|
ObjectDefineProperty,
|
||||||
|
@ -131,38 +130,13 @@ function enroll(item, msecs) {
|
||||||
* after `after` milliseconds.
|
* after `after` milliseconds.
|
||||||
* @param {Function} callback
|
* @param {Function} callback
|
||||||
* @param {number} [after]
|
* @param {number} [after]
|
||||||
* @param {any} [arg1]
|
* @param {...any} [args]
|
||||||
* @param {any} [arg2]
|
|
||||||
* @param {any} [arg3]
|
|
||||||
* @returns {Timeout}
|
* @returns {Timeout}
|
||||||
*/
|
*/
|
||||||
function setTimeout(callback, after, arg1, arg2, arg3) {
|
function setTimeout(callback, after, ...args) {
|
||||||
validateFunction(callback, 'callback');
|
validateFunction(callback, 'callback');
|
||||||
|
const timeout = new Timeout(callback, after, args.length ? args : undefined, false, true);
|
||||||
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);
|
|
||||||
insert(timeout, timeout._idleTimeout);
|
insert(timeout, timeout._idleTimeout);
|
||||||
|
|
||||||
return timeout;
|
return timeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,38 +174,13 @@ function clearTimeout(timer) {
|
||||||
* every `repeat` milliseconds.
|
* every `repeat` milliseconds.
|
||||||
* @param {Function} callback
|
* @param {Function} callback
|
||||||
* @param {number} [repeat]
|
* @param {number} [repeat]
|
||||||
* @param {any} [arg1]
|
* @param {...any} [args]
|
||||||
* @param {any} [arg2]
|
|
||||||
* @param {any} [arg3]
|
|
||||||
* @returns {Timeout}
|
* @returns {Timeout}
|
||||||
*/
|
*/
|
||||||
function setInterval(callback, repeat, arg1, arg2, arg3) {
|
function setInterval(callback, repeat, ...args) {
|
||||||
validateFunction(callback, 'callback');
|
validateFunction(callback, 'callback');
|
||||||
|
const timeout = new Timeout(callback, repeat, args.length ? args : undefined, true, true);
|
||||||
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);
|
|
||||||
insert(timeout, timeout._idleTimeout);
|
insert(timeout, timeout._idleTimeout);
|
||||||
|
|
||||||
return timeout;
|
return timeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -273,35 +222,12 @@ Timeout.prototype[SymbolToPrimitive] = function() {
|
||||||
* Schedules the immediate execution of `callback`
|
* Schedules the immediate execution of `callback`
|
||||||
* after I/O events' callbacks.
|
* after I/O events' callbacks.
|
||||||
* @param {Function} callback
|
* @param {Function} callback
|
||||||
* @param {any} [arg1]
|
* @param {...any} [args]
|
||||||
* @param {any} [arg2]
|
|
||||||
* @param {any} [arg3]
|
|
||||||
* @returns {Immediate}
|
* @returns {Immediate}
|
||||||
*/
|
*/
|
||||||
function setImmediate(callback, arg1, arg2, arg3) {
|
function setImmediate(callback, ...args) {
|
||||||
validateFunction(callback, 'callback');
|
validateFunction(callback, 'callback');
|
||||||
|
return new Immediate(callback, args.length ? args : undefined);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectDefineProperty(setImmediate, customPromisify, {
|
ObjectDefineProperty(setImmediate, customPromisify, {
|
||||||
|
|
Loading…
Reference in New Issue