function calls: direct vs apply vs call vs bind
JavaScript performance comparison
Preparation code
<script>
Benchmark.prototype.setup = function() {
var f = function() {
return this;
};
var that = {
f: f
};
var bound = f.bind(that);
var wrappedCall = function() {
f.call(that);
};
var wrappedApply = function() {
f.apply(that);
};
var slice = Array.prototype.slice;
Function.prototype.bind2 = function(_this) {
var _self = this;
var args = slice.call(arguments, 1);
if (args.length === 0) {
return function() {
if (arguments.length === 0) return _self.call(_this);
else if (arguments.length > 0) return _self.apply(_this, args);
}
}
return function() {
if (arguments.length === 0) return _self.apply(_this, args);
var a2 = args.contact(slice.call(arguments));
return _self.apply(_this, a2);
}
}
var bound2 = f.bind2(that);
var name = 'f';
};
</script>
Test runner
Warning! For accurate results, please disable Firebug before running the tests. (Why?)
Java applet disabled.
Test | Ops/sec | |
---|---|---|
direct
|
|
pending… |
apply
|
|
pending… |
call
|
|
pending… |
bind
|
|
pending… |
bind2
|
|
pending… |
by string
|
|
pending… |
by string (indirect)
|
|
pending… |
direct (local)
|
|
pending… |
Wrapped Call
|
|
pending… |
wrapped apply
|
|
pending… |
Compare results of other browsers
Revisions
You can edit these tests or add even more tests to this page by appending /edit
to the URL.
- Revision 1: published
- Revision 2: published Stuart Carnie
- Revision 3: published Stuart Carnie
- Revision 4: published
- Revision 5: published
- Revision 6: published
- Revision 8: published
- Revision 9: published
- Revision 10: published
- Revision 11: published and last updated
- Revision 12: published
- Revision 13: published
- Revision 14: published drkibitz
- Revision 15: published
- Revision 16: published
- Revision 17: published Ger Hobbelt
- Revision 18: published Ger Hobbelt
- Revision 19: published Eamon Nerbonne
- Revision 21: published
- Revision 22: published
- Revision 23: published
- Revision 24: published
- Revision 25: published
- Revision 26: published
- Revision 27: published
- Revision 28: published
- Revision 29: published
- Revision 30: published npjohns
- Revision 31: published
- Revision 32: published
- Revision 33: published Marcin
- Revision 35: published
- Revision 36: published harry
- Revision 37: published
- Revision 38: published
- Revision 39: published
- Revision 40: published
- Revision 44: published
- Revision 45: published
- Revision 46: published
- Revision 48: published Thomas Jensen
- Revision 49: published
- Revision 51: published Roland
- Revision 52: published
- Revision 53: published test
- Revision 55: published
- Revision 56: published Cindy
- Revision 57: published acamus
- Revision 60: published Mark
- Revision 61: published
- Revision 62: published
- Revision 63: published bob
- Revision 64: published bob
- Revision 66: published
- Revision 67: published
- Revision 68: published Rezoner
- Revision 69: published
- Revision 70: published
- Revision 71: published
- Revision 72: published Jethro
- Revision 74: published
- Revision 75: published me
- Revision 76: published
- Revision 80: published lpinca
- Revision 81: published Roland Pihlakas
- Revision 82: published Roland Pihlakas
- Revision 83: published Roland Pihlakas
- Revision 84: published Marc
- Revision 85: published
- Revision 86: published
- Revision 87: published Arne Babenhauserheide
- Revision 88: published dcoderWar
- Revision 89: published
- Revision 90: published
- Revision 92: published
- Revision 93: published pusha
- Revision 94: published
- Revision 95: published
- Revision 97: published
- Revision 98: published David
- Revision 99: published Benoit
- Revision 100: published Ark
- Revision 101: published Ark
- Revision 102: published Ark
- Revision 103: published Ark
- Revision 104: published Ark
- Revision 106: published Carduelis
- Revision 107: published Grzegorz Michlicki
- Revision 108: published Grzegorz Michlicki
- Revision 109: published Grzegorz Michlicki
- Revision 110: published Grzegorz Michlicki
- Revision 111: published Grzegorz Michlicki
- Revision 112: published
0 Comments