Prototype vs Module pattern performance (v128)

Revision 128 of this benchmark created by mog 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

Preparation HTML

<script>
function TraditionalPrototypeClass() {}

TraditionalPrototypeClass.prototype.foo = function() {};

TraditionalPrototypeClass.prototype.bar = function() {};


function ModulePatternClass() {
  this.foo = function() {};

  this.bar = function() {};
}


function ModulePatternClassIndirect() {
  function foo() {};

  function bar() {};
  return {
    foo: foo,
    bar: bar
  };
}

//no var, so we can access it in the tests
var testProto = new TraditionalPrototypeClass(),
  testModule = new ModulePatternClass(),
  testModuleIndirect = ModulePatternClassIndirect();
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Prototypal
var o = new TraditionalPrototypeClass()
o.bar;
o.foo;
ready
Module pattern
var o = new ModulePatternClass()
o.bar;
o.foo;
ready
Module pattern Indirect
var o = new ModulePatternClassIndirect()
o.bar;
o.foo;
ready
Retrieval - Proto
testProto.bar();
testProto.foo();
ready
Retrieval - Module
testModule.bar();
testModule.foo();
ready
Retrieval - Module Pattern
testModuleIndirect.bar();
testModuleIndirect.foo();
ready

Revisions

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