Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
timers: optimize callback call: bind -> arrow
ES6 arrow functions are much more efficient than `.bind()` functions.
  • Loading branch information
bsnote committed Nov 26, 2015
commit ea3f421c8c983842f808eeeaf31221d7401d1721
18 changes: 9 additions & 9 deletions lib/timers.js
Original file line number Diff line number Diff line change
Expand Up @@ -193,21 +193,21 @@ exports.setTimeout = function(callback, after) {
case 2:
break;
case 3:
ontimeout = callback.bind(timer, arguments[2]);
ontimeout = () => callback.call(timer, arguments[2]);
break;
case 4:
ontimeout = callback.bind(timer, arguments[2], arguments[3]);
ontimeout = () => callback.call(timer, arguments[2], arguments[3]);
break;
case 5:
ontimeout =
callback.bind(timer, arguments[2], arguments[3], arguments[4]);
() => callback.call(timer, arguments[2], arguments[3], arguments[4]);
break;
// slow case
default:
var args = new Array(length - 2);
for (var i = 2; i < length; i++)
args[i - 2] = arguments[i];
ontimeout = callback.apply.bind(callback, timer, args);
ontimeout = () => callback.apply(timer, args);
break;
}
timer._onTimeout = ontimeout;
Expand Down Expand Up @@ -248,20 +248,20 @@ exports.setInterval = function(callback, repeat) {
case 2:
break;
case 3:
ontimeout = callback.bind(timer, arguments[2]);
ontimeout = () => callback.call(timer, arguments[2]);
break;
case 4:
ontimeout = callback.bind(timer, arguments[2], arguments[3]);
ontimeout = () => callback.call(timer, arguments[2], arguments[3]);
break;
case 5:
ontimeout =
callback.bind(timer, arguments[2], arguments[3], arguments[4]);
() => callback.call(timer, arguments[2], arguments[3], arguments[4]);
break;
default:
var args = new Array(length - 2);
for (var i = 2; i < length; i += 1)
args[i - 2] = arguments[i];
ontimeout = callback.apply.bind(callback, timer, args);
ontimeout = () => callback.apply(timer, args);
break;
}
timer._onTimeout = wrapper;
Expand All @@ -273,7 +273,7 @@ exports.setInterval = function(callback, repeat) {
return timer;

function wrapper() {
timer._repeat.call(this);
timer._repeat();

// Timer might be closed - no point in restarting it
if (!timer._repeat)
Expand Down