javascript apply vs. non-apply

JavaScript performance comparison

Revision 2 of this 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 = {
                            secret : 9,
                            getSecret : function() {
                                return this.secret + " : " + name;
                            }
                        };
       
                        return {
                            name : "red-key",
                            print : function() {
                               console.log("printing contents");
                               console.log(this);
                               private.getSecret(this.name);
                            }
                        };
                    };
                 
   
                    var test1 = constructor();
                    var test2 = constructor();
                    var test3 = constructor();
                    var test4 = constructor();
                    var test5 = constructorTwo();
                    var test6 = constructorTwo();
                    var test7 = constructorTwo();
                    var test8 = constructorTwo();
   
};
</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
                test1.name = "b";
                test2.name = "z";
                test3.name = "g";
                test4.name = "9";
                test1.print();
                test2.print();
                test3.print();
                test4.print();
pending…
non-apply
                test5.name = "b";
                test6.name = "z";
                test7.name = "g";
                test8.name = "9";
                test5.print();
                test6.print();
                test7.print();
                test8.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