Prototype vs Module pattern performance (v99)

Revision 99 of this benchmark created by David on


Description

Added testing of accessing long/short function names.

Setup

function TraditionalPrototypeClass() {
    }
    
    TraditionalPrototypeClass.prototype.foo = function() {
    var i = 1;
    i++;
    };
    
    TraditionalPrototypeClass.prototype.bar = function() {
    var i = 1;
    i++;
    };
    
    TraditionalPrototypeClass.prototype.barlonglongGreatFunctionNameToBeClear = function() {
    var i = 1;
    i++;
    };
    
    function ModulePatternClass() {
        this.foo = function() {
    var i = 1;
    i++;
        };
        this.bar = function() {
    var i = 1;
    i++;
        };
        this.barlonglongGreatFunctionNameToBeClear = function() {
    var i = 1;
    i++;
        };
    }
    
    var ModuleCachePatternClass = (function () {
        function foo() {
    var i = 1;
    i++;
        }
        function barlonglongGreatFunctionNameToBeClear() {
    var i = 1;
    i++;
        }  
        function bar() {
    var i = 1;
    i++;
        }  
        return function () {
            this.foo = foo;
            this.bar = bar;
            this.bar2 = barlonglongGreatFunctionNameToBeClear;
            this.barlonglongGreatFunctionNameToBeClear = bar;
            this.barlonglongGreatFunctionNameToBeClear2 = barlonglongGreatFunctionNameToBeClear;
        };
    }());
    
    var standardObject = {
        foo: function(){
    var i = 1;
    i++;
        },
        barlonglongGreatFunctionNameToBeClear: function(){
    var i = 1;
    i++;
        },
        bar: function(){
    var i = 1;
    i++;
        }
    };

Test runner

Ready to run.

Testing in
TestOps/sec
Prototype short
var o = new TraditionalPrototypeClass();
o.bar();
o.foo();
ready
Prototype long
var o = new TraditionalPrototypeClass()
o.barlonglongGreatFunctionNameToBeClear();
o.foo();
ready
object
var o = standardObject;
o.bar();
o.foo();
ready
object long
var o = standardObject;
o.barlonglongGreatFunctionNameToBeClear();
o.foo();
ready
short to long
var o = new ModuleCachePatternClass()
o.bar2();
o.foo();
ready
long to short
var o = new ModuleCachePatternClass()
o.barlonglongGreatFunctionNameToBeClear();
o.foo();
ready
long
var o = new ModuleCachePatternClass()
o.barlonglongGreatFunctionNameToBeClear2();
o.foo();
ready
short
var o = new ModuleCachePatternClass()
o.bar();
o.foo();
ready
Module long
var o = new ModulePatternClass()
o.barlonglongGreatFunctionNameToBeClear();
o.foo();
ready
Module short
var o = new ModulePatternClass()
o.bar();
o.foo();
ready

Revisions

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