Skip to content

Commit 3c2500c

Browse files
gurgundayRafaelGSS
authored andcommitted
timers: optimize timer functions with improved argument handling
PR-URL: #57072 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Yagiz Nizipli <[email protected]> Reviewed-By: Ruben Bridgewater <[email protected]> Reviewed-By: Chemi Atlow <[email protected]> Reviewed-By: Gerhard Stöbich <[email protected]> Reviewed-By: Luigi Pinca <[email protected]>
1 parent fa25ce8 commit 3c2500c

File tree

1 file changed

+9
-83
lines changed

1 file changed

+9
-83
lines changed

lib/timers.js

Lines changed: 9 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
'use strict';
2323

2424
const {
25-
ArrayPrototypePush,
2625
MathTrunc,
2726
ObjectDefineProperties,
2827
ObjectDefineProperty,
@@ -113,38 +112,13 @@ function unenroll(item) {
113112
* after `after` milliseconds.
114113
* @param {Function} callback
115114
* @param {number} [after]
116-
* @param {any} [arg1]
117-
* @param {any} [arg2]
118-
* @param {any} [arg3]
115+
* @param {...any} [args]
119116
* @returns {Timeout}
120117
*/
121-
function setTimeout(callback, after, arg1, arg2, arg3) {
118+
function setTimeout(callback, after, ...args) {
122119
validateFunction(callback, 'callback');
123-
124-
let i, args;
125-
switch (arguments.length) {
126-
// fast cases
127-
case 1:
128-
case 2:
129-
break;
130-
case 3:
131-
args = [arg1];
132-
break;
133-
case 4:
134-
args = [arg1, arg2];
135-
break;
136-
default:
137-
args = [arg1, arg2, arg3];
138-
for (i = 5; i < arguments.length; i++) {
139-
// Extend array dynamically, makes .apply run much faster in v6.0.0
140-
ArrayPrototypePush(args, arguments[i]);
141-
}
142-
break;
143-
}
144-
145-
const timeout = new Timeout(callback, after, args, false, true);
120+
const timeout = new Timeout(callback, after, args.length ? args : undefined, false, true);
146121
insert(timeout, timeout._idleTimeout);
147-
148122
return timeout;
149123
}
150124

@@ -182,38 +156,13 @@ function clearTimeout(timer) {
182156
* every `repeat` milliseconds.
183157
* @param {Function} callback
184158
* @param {number} [repeat]
185-
* @param {any} [arg1]
186-
* @param {any} [arg2]
187-
* @param {any} [arg3]
159+
* @param {...any} [args]
188160
* @returns {Timeout}
189161
*/
190-
function setInterval(callback, repeat, arg1, arg2, arg3) {
162+
function setInterval(callback, repeat, ...args) {
191163
validateFunction(callback, 'callback');
192-
193-
let i, args;
194-
switch (arguments.length) {
195-
// fast cases
196-
case 1:
197-
case 2:
198-
break;
199-
case 3:
200-
args = [arg1];
201-
break;
202-
case 4:
203-
args = [arg1, arg2];
204-
break;
205-
default:
206-
args = [arg1, arg2, arg3];
207-
for (i = 5; i < arguments.length; i++) {
208-
// Extend array dynamically, makes .apply run much faster in v6.0.0
209-
ArrayPrototypePush(args, arguments[i]);
210-
}
211-
break;
212-
}
213-
214-
const timeout = new Timeout(callback, repeat, args, true, true);
164+
const timeout = new Timeout(callback, repeat, args.length ? args : undefined, true, true);
215165
insert(timeout, timeout._idleTimeout);
216-
217166
return timeout;
218167
}
219168

@@ -255,35 +204,12 @@ Timeout.prototype[SymbolToPrimitive] = function() {
255204
* Schedules the immediate execution of `callback`
256205
* after I/O events' callbacks.
257206
* @param {Function} callback
258-
* @param {any} [arg1]
259-
* @param {any} [arg2]
260-
* @param {any} [arg3]
207+
* @param {...any} [args]
261208
* @returns {Immediate}
262209
*/
263-
function setImmediate(callback, arg1, arg2, arg3) {
210+
function setImmediate(callback, ...args) {
264211
validateFunction(callback, 'callback');
265-
266-
let i, args;
267-
switch (arguments.length) {
268-
// fast cases
269-
case 1:
270-
break;
271-
case 2:
272-
args = [arg1];
273-
break;
274-
case 3:
275-
args = [arg1, arg2];
276-
break;
277-
default:
278-
args = [arg1, arg2, arg3];
279-
for (i = 4; i < arguments.length; i++) {
280-
// Extend array dynamically, makes .apply run much faster in v6.0.0
281-
ArrayPrototypePush(args, arguments[i]);
282-
}
283-
break;
284-
}
285-
286-
return new Immediate(callback, args);
212+
return new Immediate(callback, args.length ? args : undefined);
287213
}
288214

289215
ObjectDefineProperty(setImmediate, customPromisify, {

0 commit comments

Comments
 (0)