Proxy

JavaScript performance comparison

Revision 3 of this test case created

Info

jQuery's proxy, vs a function wrapping .apply()

Preparation code

<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
var  interval,
     count = 0,
     scoped = {count:0};

function add(nb, string) {
  this.count+=nb;
}

function proxy(fn, context, args) {
  return function() { return fn.apply(context, Array.prototype.slice.call(arguments, 2));}
};

function proxy2(fn, context, extra) {
  if(extra) {
    var args = Array.prototype.slice.call(arguments, 2);
    return function() {
      return fn.apply(context, args.concat(Array.prototype.slice.call(arguments)));
    }
  } else {
    return function() {
      return fn.apply(context, Array.prototype.slice.call(arguments));
    }
  }
}
</script>
<script>
Benchmark.prototype.teardown = function() {
    if(count > 0) {
      console.log("proxy isn't working as it should!");
    }
};
</script>

Preparation code output

Test runner

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

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
jQuery's proxy
$.proxy(add, scoped, 1, "jproxy")();
pending…
Apply
proxy2(add, scoped, 1, "sproxy")();
pending…
jQuery's proxy (no args)
$.proxy(add, scoped)();
pending…
Apply (no args)
proxy2(add, scoped)();
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