javascript apply vs. non-apply

JavaScript performance comparison

Test case created by Anzor

Preparation code

 
<script>
Benchmark.prototype.setup = function() {
                    var private = {
                      secret: 9,
                      getSecret: function(name) {
                        return this.secret + " : " + name;
                      }
                    };
   
                    var public = {
                      name: "red-key",
                      print: function() {
                        console.log("printing contents");
                        console.log(this.public);
                        this.getSecret(this.public.name);
                      }
                    };
   
                    var constructor = function() {
                      var child = {
                        public: {}
                      };
   
                      for (propertyName in public) {
                        var value = public[propertyName];
                        if (typeof value === "function") {
                          Object.defineProperty(child.public, propertyName, {
                            enumerable: true,
                            value: function() {
                              return value.apply(child, arguments);
                            }
                          });
                        } else
                          child.public[propertyName] = value;
                      }
                      for (propertyName in private) {
                        child[propertyName] = private[propertyName];
                      }
                      return child.public;
                    };
   
                    var constructorTwo = function() {
                      var private = this;
                      var secret = 9;
   
                      function getSecret() {
                        return private.secret;
                      }
   
                      return {
                        name: "red-key",
                        print: function() {
                          console.log("printing contents");
                          console.log(this);
                          getSecret();
                        }
                      };
                    };
};
</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
apply
                var test1 = constructor();
                var test2 = constructor();
                var test3 = constructor();
                var test4 = constructor();
                test1.name = "b";
                test2.name = "z";
                test3.name = "g";
                test4.name = "9";
                test1.print();
                test2.print();
                test3.print();
                test4.print();
pending…
non-apply
                var test1 = constructorTwo();
                var test2 = constructorTwo();
                var test3 = constructorTwo();
                var test4 = constructorTwo();
                test1.name = "b";
                test2.name = "z";
                test3.name = "g";
                test4.name = "9";
                test1.print();
                test2.print();
                test3.print();
                test4.print();
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