Module Pattern vs Object Literal vs Prototype

JavaScript performance comparison

Revision 4 of this test case created by Jorge Castro

Preparation code


      
      <script>
Benchmark.prototype.setup = function() {
  /*Classic Module Pattern*/
  var MyClassicModulePattern = (function() {
    //Provate Properties
    var property1;
    var property2;
  
    //Private Methods
    var ConcatProperties = function() {
      return property1 + property2;
    }
  
    //Public Methods
    return {
      GetProperty1: function() {
        return property1;
      },
  
      GetProperty2: function() {
        return property2;
      },
      SetProperty1: function(value) {
        property1 = value;
      },
  
      SetProperty2: function(value) {
        property2 = value;
      },
  
      GetProperties: function() {
        return ConcatProperties();
      }
    }
  }());
  
  /*Object Literal Notation*/
  var MyObjectLiteralNotation = {
    property1: undefined,
    property2: undefined,
  
    ConcatProperties: function() {
      return property1 + property2;
    },
  
    GetProperty1: function() {
      return property1;
    },
  
    GetProperty2: function() {
      return property2;
    },
    SetProperty1: function(value) {
      property1 = value;
    },
  
    SetProperty2: function(value) {
      property2 = value;
    },
  
    GetProperties: function() {
      return this.ConcatProperties();
    }
  };
  
  /*Module with individual Prototype*/
  var MyModuleIndividualPrototype = function() {
    var property1;
    var property2;
  
    //Private Methods
    this.ConcatProperties = function() {
      return this.property1 + this.property2;
    }
  };
  
  MyModuleIndividualPrototype.prototype.GetProperty1 = function() {
    return this.property1;
  };
  
  MyModuleIndividualPrototype.prototype.GetProperty2 = function() {
    return this.property2;
  };
  
  MyModuleIndividualPrototype.prototype.SetProperty1 = function(value) {
    this.property1 = value;
  };
  
  MyModuleIndividualPrototype.prototype.SetProperty2 = function(value) {
    this.property2 = value;
  };
  
  MyModuleIndividualPrototype.prototype.GetProperties = function() {
    return this.ConcatProperties();
  };
  
  var oMyModuleIndividualPrototype = new MyModuleIndividualPrototype();
  
  /* Module override Prototype*/
  var MyModulePatternOverridePrototype = (function() {
    //Private Properties
    var property1;
    var property2;
  
    // constructor
    var MyModulePatternOverridePrototype = function() {};
  
    //Private Methods
    var ConcatProperties = function() {
      return property1 + property2;
    }
  
    // prototype
    MyModulePatternOverridePrototype.prototype = {
      constructor: MyModulePatternOverridePrototype,
      GetProperty1: function() {
        return property1;
      },
      GetProperty2: function() {
        return property2;
      },
      SetProperty1: function(value) {
        property1 = value;
      },
      SetProperty2: function(value) {
        property2 = value;
      },
      GetProperties: function() {
        return ConcatProperties();
      }
    };
  
    return MyModulePatternOverridePrototype;
  })();
  
  var oMyModulePatternOverridePrototype = new MyModulePatternOverridePrototype();

};
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in CCBot 2.0.0 / Other 0.0.0
Test Ops/sec
Classic Module Pattern
MyClassicModulePattern.SetProperty1("Prop1");
MyClassicModulePattern.SetProperty2("Prop2");
MyClassicModulePattern.GetProperty1();
MyClassicModulePattern.GetProperty2();
MyClassicModulePattern.GetProperties();
pending…
Object Literal Notation
MyObjectLiteralNotation.SetProperty1("Prop1");
MyObjectLiteralNotation.SetProperty2("Prop2");
MyObjectLiteralNotation.GetProperty1();
MyObjectLiteralNotation.GetProperty2();
MyObjectLiteralNotation.GetProperties();
pending…
Module With Individual Prototype
oMyModuleIndividualPrototype.SetProperty1("Prop1");
oMyModuleIndividualPrototype.SetProperty2("Prop2");
oMyModuleIndividualPrototype.GetProperty1();
oMyModuleIndividualPrototype.GetProperty2();
oMyModuleIndividualPrototype.GetProperties();
pending…
Module Pattern override Prototype
oMyModulePatternOverridePrototype.SetProperty1("Prop1");
oMyModulePatternOverridePrototype.SetProperty2("Prop2");
oMyModulePatternOverridePrototype.GetProperty1();
oMyModulePatternOverridePrototype.GetProperty2();
oMyModulePatternOverridePrototype.GetProperties();
pending…

Compare results of other browsers

Revisions

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

1 Comment

alarm app windows 10 commented :

Many people have the connect this latest alarm clock for the support by all windows version forever this is the way to looking the online set alarm clock windows 10 according your working time managements so go hurry and install this easily thanks.