Last active
September 27, 2018 12:19
-
-
Save maxnordlund/63ae220d410c0e1e686b2860cb2b992f to your computer and use it in GitHub Desktop.
Quick micro benchmark regarding passing of arguments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module.exports = exports = benchmark | |
function benchmark(size, fn, name) { | |
console.time("benchmark " + name) | |
var result = 0 | |
for (var i = 0; i < size; ++i) result = fn(result, i)() | |
console.timeEnd("benchmark " + name) | |
console.log(result) | |
} | |
function add(a, b) { return a + b } | |
function sum(a, b) { | |
return function() { | |
return add(a, b) | |
} | |
} | |
function passingArguments(fn) { | |
return function capture() { | |
var that = this, args = arguments | |
return function apply() { | |
return fn.apply(that, args) | |
} | |
} | |
} | |
function bindBindApply(fn) { | |
return function capture() { | |
return fn.bind.bind(fn, this).apply(undefined, arguments) | |
} | |
} | |
function argsArray(fn) { | |
return function capture() { | |
var that = this, args = [] | |
for (var i = 0, len = arguments.length; i < len; ++i) { | |
args.push(arguments[i]) | |
} | |
return function apply() { | |
return fn.apply(that, args) | |
} | |
} | |
} | |
function pushArgsArray(fn) { | |
return function capture() { | |
var that = this, args = [] | |
args.push.apply(args, arguments) | |
return function apply() { | |
return fn.apply(that, args) | |
} | |
} | |
} | |
function run() { | |
benchmark(1e6, sum, "sum") | |
benchmark(1e6, passingArguments(add), "passingArguments") | |
benchmark(1e6, bindBindApply(add), "bindBindApply") | |
benchmark(1e6, argsArray(add), "argsArray") | |
benchmark(1e6, pushArgsArray(add), "pushArgsArray") | |
} | |
run() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Edge: | |
benchmark sum: 1 279,4ms | |
benchmark passingArguments: 2 709,7ms | |
benchmark bindBindApply: 2 930ms | |
benchmark argsArray: 3 450,7ms | |
benchmark pushArgsArray: 3 264,2ms | |
IE11: | |
benchmark sum: 1 617,2ms | |
benchmark passingArguments: 2 325,9ms | |
benchmark bindBindApply: 1 537,2ms | |
benchmark argsArray: 1 688,2ms | |
benchmark pushArgsArray: 2 656ms | |
Win FF: | |
benchmark sum: 329ms | |
benchmark passingArguments: 1124ms | |
benchmark bindBindApply: 582ms | |
benchmark argsArray: 611ms | |
benchmark pushArgsArray: 1381ms | |
Win Chrome: | |
benchmark sum: 60ms | |
benchmark passingArguments: 96ms | |
benchmark bindBindApply: 143.000244140625ms | |
benchmark argsArray: 171.999755859375ms | |
benchmark pushArgsArray: 510ms | |
Mac FF: | |
benchmark sum: 233ms | |
benchmark passingArguments: 548ms | |
benchmark bindBindApply: 445ms | |
benchmark argsArray: 430ms | |
benchmark pushArgsArray: 706ms | |
Mac Chrome: | |
benchmark sum: 68.081787109375ms | |
benchmark passingArguments: 108.812744140625ms | |
benchmark bindBindApply: 133.889892578125ms | |
benchmark argsArray: 246.803955078125ms | |
benchmark pushArgsArray: 512.780029296875ms | |
Safari: | |
benchmark sum: 81.586ms | |
benchmark passingArguments: 143.363ms | |
benchmark bindBindApply: 612.219ms | |
benchmark argsArray: 165.935ms | |
benchmark pushArgsArray: 227.067ms | |
Node 10.10.0: | |
benchmark sum: 9.005ms | |
benchmark passingArguments: 68.174ms | |
benchmark bindBindApply: 90.786ms | |
benchmark argsArray: 155.998ms | |
benchmark pushArgsArray: 363.361ms |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment