Prototype vs Module pattern performance (v191)

Revision 191 of this benchmark created on


Description

Called the function by adding () to the end of each function.

Removed iterations in tests, because jsperf already does that for us. And renamed variables to be more meaningful to us humans. And other cosmetic changes.

The most important thing to remember is to use the right tool for the job. All these tests do is reference an object with a complex memory allocation. When you don't need something fancy, you're better off using a regular old object

Setup

function TraditionalPrototypeClass() {}
    
    TraditionalPrototypeClass.prototype.foo = function() {};
    
    TraditionalPrototypeClass.prototype.bar = function() {};
    
    function ModulePatternClass() {
      this.foo = function() {};
    
      this.bar = function() {};
    }
    
    var ModuleCachePatternClass = (function() {
      function foo() {}
    
      function bar() {}
    
      return function() {
        this.foo = foo;
        this.bar = bar;
      };
    }());
    
    var standardObject = {
      foo: function() {},
      bar: function() {}
    };
    
    
    var o1 = new TraditionalPrototypeClass()
    var o2 = new ModulePatternClass()
    var o3 = new ModuleCachePatternClass()
    var o4 = standardObject;

Test runner

Ready to run.

Testing in
TestOps/sec
Prototypal
o1.bar();
o1.foo();
ready
Module pattern
o2.bar();
o2.foo();
ready
Module pattern with cached functions
o3.bar();
o3.foo();
ready
Use the right tool for the job
o4.bar();
o4.foo();
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.