Prototype vs Module pattern performance (v209)

Revision 209 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);
      };
    Klass3 = function () {
        this.testProp = "Hello World";
        this.foo = FooFunction;
        this.bar = BarFunction;
      }
    
    Klass4 = function () {
        return {
            testProp: "Hello World",
            foo: FooFunction,
            bar: BarFunction,
        };
    };

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
module pattern with cache without new
for (var i = 1E3, objs = []; i--;) {
  var o = 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.