Prototype vs Module pattern performance (v208)

Revision 208 of this benchmark created on


Setup

function log(l){
        return l+l;
    }
    
    Klass1 = function() {
    this.testProp = "Hello World";
    };
    Klass1.prototype.foo = function() {
      log(this.testProp);
    };
    Klass1.prototype.bar = function() {
      log(this.testProp);
    };
    
    
    Klass2 = function() {
      return {
        testProp: "Hello World",
        foo: function() {
          log(this.testProp);
        },
        bar: function() {
          log(this.TestProp);
        }
      };
    };
    
    
    var FooFunction = function(v) {
      log(this.testProp);
    }, BarFunction = function(v) {
        log(this.testProp);
      };
    function Klass3() {
    this.testProp = "Hello World";
    
        this.foo = FooFunction;
        this.bar = BarFunction;
      }
    
    var Klass4 = (function () {
        function Klass4() {
            this.hello = "Hello World";
        } 
        Klass4.prototype.foo = function () {
            log(this.hello);
        }
        Klass4.prototype.bar = function () {
            log(this.hello);
        }
        return Klass4;
    })();

Test runner

Ready to run.

Testing in
TestOps/sec
Prototypal
for (var i = 1E3, objs = []; i--;) {
  var o = new Klass1();
  objs.push(o);
  o.bar();
  o.foo();
}
ready
Module pattern
for (var i = 1E3, objs = []; i--;) {
  var o = new Klass2();
  objs.push(o);
  o.bar();
  o.foo();
}
ready
Module pattern with cached functions
for (var i = 1E3, objs = []; i--;) {
  var o = new Klass3();
  objs.push(o);
  o.bar();
  o.foo();
}
ready
Class pattern
for (var i = 1E3, objs = []; i--;) {
  var o = new Klass4();
  objs.push(o);
  o.bar();
  o.foo();
}
ready

Revisions

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