Function versus Function.call versus Function.apply

JavaScript performance comparison

Revision 11 of this test case created by Emil

Preparation code

 
<script>
Benchmark.prototype.setup = function() {
    var o = {
        f: function f(a, b, c) {
            return [a, b, c];
        }
    },
    d = "string",
    e = 123,
    f = ['a', 'r', 'r', 'a', 'y'],
    g = [d, e, f];
};
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
Direct
o.f(d, e, f)
pending…
Call
o.f.call(o, d, e, f)
pending…
Apply
o.f.apply(o, [d, e, f])
pending…
Call, read from cashed array
o.f.call(o, g[0], g[1], g[2])
pending…
Apply, with cashed array
o.f.apply(o, g)
pending…
False optimisation
switch (g.length) {
 case 0:
  o.f.call(o);
  break;
 case 1:
  o.f.call(o, g[0]);
  break;
 case 2:
  o.f.call(o, g[0], g[1]);
  break;
 case 3:
  o.f.call(o, g[0], g[1], g[2]);
  break;
 default:
  o.f.apply(o, g);
}
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. Here’s a list of current revisions for this page:

0 comments

Add a comment