lib: remove Reflect.apply where appropriate
Using Reflect.apply where the callback context does not need to change is unnecessary and less performant. PR-URL: https://github.com/nodejs/node/pull/27349 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
parent
d33fddb7f4
commit
f4f937b296
42
benchmark/timers/timers-breadth-args.js
Normal file
42
benchmark/timers/timers-breadth-args.js
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
'use strict';
|
||||||
|
const common = require('../common.js');
|
||||||
|
|
||||||
|
const bench = common.createBenchmark(main, {
|
||||||
|
n: [1e6],
|
||||||
|
});
|
||||||
|
|
||||||
|
function main({ n }) {
|
||||||
|
var j = 0;
|
||||||
|
function cb1(arg1) {
|
||||||
|
j++;
|
||||||
|
if (j === n)
|
||||||
|
bench.end(n);
|
||||||
|
}
|
||||||
|
function cb2(arg1, arg2) {
|
||||||
|
j++;
|
||||||
|
if (j === n)
|
||||||
|
bench.end(n);
|
||||||
|
}
|
||||||
|
function cb3(arg1, arg2, arg3) {
|
||||||
|
j++;
|
||||||
|
if (j === n)
|
||||||
|
bench.end(n);
|
||||||
|
}
|
||||||
|
function cb4(arg1, arg2, arg3, arg4) {
|
||||||
|
j++;
|
||||||
|
if (j === n)
|
||||||
|
bench.end(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
bench.start();
|
||||||
|
for (var i = 0; i < n; i++) {
|
||||||
|
if (i % 4 === 0)
|
||||||
|
setTimeout(cb4, 1, 3.14, 1024, true, false);
|
||||||
|
else if (i % 3 === 0)
|
||||||
|
setTimeout(cb3, 1, 512, true, null);
|
||||||
|
else if (i % 2 === 0)
|
||||||
|
setTimeout(cb2, 1, false, 5.1);
|
||||||
|
else
|
||||||
|
setTimeout(cb1, 1, 0);
|
||||||
|
}
|
||||||
|
}
|
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const { Math, Object, Reflect } = primordials;
|
const { Math, Object } = primordials;
|
||||||
|
|
||||||
const { fs: constants } = internalBinding('constants');
|
const { fs: constants } = internalBinding('constants');
|
||||||
const {
|
const {
|
||||||
@ -133,9 +133,7 @@ function makeCallback(cb) {
|
|||||||
throw new ERR_INVALID_CALLBACK(cb);
|
throw new ERR_INVALID_CALLBACK(cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (...args) => {
|
return (...args) => cb(...args);
|
||||||
return Reflect.apply(cb, undefined, args);
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Special case of `makeCallback()` that is specific to async `*stat()` calls as
|
// Special case of `makeCallback()` that is specific to async `*stat()` calls as
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const { FunctionPrototype, Object, Reflect } = primordials;
|
const { FunctionPrototype, Object } = primordials;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
ERR_ASYNC_TYPE,
|
ERR_ASYNC_TYPE,
|
||||||
@ -278,14 +278,14 @@ function clearDefaultTriggerAsyncId() {
|
|||||||
|
|
||||||
function defaultTriggerAsyncIdScope(triggerAsyncId, block, ...args) {
|
function defaultTriggerAsyncIdScope(triggerAsyncId, block, ...args) {
|
||||||
if (triggerAsyncId === undefined)
|
if (triggerAsyncId === undefined)
|
||||||
return Reflect.apply(block, null, args);
|
return block(...args);
|
||||||
// CHECK(Number.isSafeInteger(triggerAsyncId))
|
// CHECK(Number.isSafeInteger(triggerAsyncId))
|
||||||
// CHECK(triggerAsyncId > 0)
|
// CHECK(triggerAsyncId > 0)
|
||||||
const oldDefaultTriggerAsyncId = async_id_fields[kDefaultTriggerAsyncId];
|
const oldDefaultTriggerAsyncId = async_id_fields[kDefaultTriggerAsyncId];
|
||||||
async_id_fields[kDefaultTriggerAsyncId] = triggerAsyncId;
|
async_id_fields[kDefaultTriggerAsyncId] = triggerAsyncId;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return Reflect.apply(block, null, args);
|
return block(...args);
|
||||||
} finally {
|
} finally {
|
||||||
async_id_fields[kDefaultTriggerAsyncId] = oldDefaultTriggerAsyncId;
|
async_id_fields[kDefaultTriggerAsyncId] = oldDefaultTriggerAsyncId;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const { FunctionPrototype, Reflect } = primordials;
|
const { FunctionPrototype } = primordials;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
// For easy access to the nextTick state in the C++ land,
|
// For easy access to the nextTick state in the C++ land,
|
||||||
@ -81,7 +81,7 @@ function processTicksAndRejections() {
|
|||||||
if (tock.args === undefined)
|
if (tock.args === undefined)
|
||||||
callback();
|
callback();
|
||||||
else
|
else
|
||||||
Reflect.apply(callback, undefined, tock.args);
|
callback(...tock.args);
|
||||||
|
|
||||||
emitAfter(asyncId);
|
emitAfter(asyncId);
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@
|
|||||||
// timers within (or creation of a new list). However, these operations combined
|
// timers within (or creation of a new list). However, these operations combined
|
||||||
// have shown to be trivial in comparison to other timers architectures.
|
// have shown to be trivial in comparison to other timers architectures.
|
||||||
|
|
||||||
const { Math, Object, Reflect } = primordials;
|
const { Math, Object } = primordials;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
scheduleTimer,
|
scheduleTimer,
|
||||||
@ -438,7 +438,7 @@ function getTimerCallbacks(runNextTicks) {
|
|||||||
if (!argv)
|
if (!argv)
|
||||||
immediate._onImmediate();
|
immediate._onImmediate();
|
||||||
else
|
else
|
||||||
Reflect.apply(immediate._onImmediate, immediate, argv);
|
immediate._onImmediate(...argv);
|
||||||
} finally {
|
} finally {
|
||||||
immediate._onImmediate = null;
|
immediate._onImmediate = null;
|
||||||
|
|
||||||
@ -530,7 +530,7 @@ function getTimerCallbacks(runNextTicks) {
|
|||||||
if (args === undefined)
|
if (args === undefined)
|
||||||
timer._onTimeout();
|
timer._onTimeout();
|
||||||
else
|
else
|
||||||
Reflect.apply(timer._onTimeout, timer, args);
|
timer._onTimeout(...args);
|
||||||
} finally {
|
} finally {
|
||||||
if (timer._repeat && timer._idleTimeout !== -1) {
|
if (timer._repeat && timer._idleTimeout !== -1) {
|
||||||
timer._idleTimeout = timer._repeat;
|
timer._idleTimeout = timer._repeat;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user