Prototype vs Module pattern performance (v203)

Revision 203 of this benchmark created on


Description

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

// Prototypal pattern
      Klass1 = function () {}
      Klass1.prototype.foo = function () {
          log('foo');
      }
      Klass1.prototype.bar = function () {
          log('bar');
      }
    
      // Module pattern
      Klass2 = function () {
          var foo = function () {
              log('foo');
          },
          bar = function () {
              log('bar');
          };
    
          return {
              foo: foo,
              bar: bar
          }
      }
    
    
      // Module pattern with cached functions
      var FooFunction = function () {
          log('foo');
      };
      var BarFunction = function () {
          log('bar');
      };
    
      Klass3 = function () {
          return {
              foo: FooFunction,
              bar: BarFunction
          }
      }

Test runner

Ready to run.

Testing in
TestOps/sec
Prototypal
// Prototypal
  var i = 100000,
      objs = [];
  while (i--) {
      var o = new Klass1()
      objs.push(new Klass1());
      o.bar;
      o.foo;
  }
 
ready
Module pattern
// Module pattern
var i = 100000,
      objs = [];
  while (i--) {
      var o = Klass2()
      objs.push(Klass2());
      o.bar;
      o.foo;
  }
ready
Module pattern with cached functions
// Module pattern with cached functions
var i = 100000,
      objs = [];
  while (i--) {
      var o = Klass3()
      objs.push(Klass3());
      o.bar;
      o.foo;
  }
ready
Use the right tool for the job
 
ready

Revisions

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