jsPerf.app is an online JavaScript performance benchmark test runner & jsperf.com mirror. It is a complete rewrite in homage to the once excellent jsperf.com now with hopefully a more modern & maintainable codebase.
jsperf.com URLs are mirrored at the same path, e.g:
https://jsperf.com/negative-modulo/2
Can be accessed at:
https://jsperf.app/negative-modulo/2
Accurate tests of the fastest JavaScript class inheritance models. This test tests method calls.
These tests aim to provide adequate and accurate results by modeling real-life application behavior and avoiding common performance-testing pitfalls. For source code and detailed explanation of the techniques used to create accurate tests - please visit https://github.com/kogarashisan/PerfTests.
Tested libraries do not include Prototype or MooTools, because they are slow. Ext.JS is not included, because it affects results of other tests.
Related test:
<script src="http://kogarashisan.github.io/PerfTests/export/dependencies-v1.js"></script>
<script src="http://kogarashisan.github.io/PerfTests/export/bundle-v1.js"></script>
<script src="http://www.btetrud.com/files/proto.umd.js"></script>
<script>
var ProtoParent = proto(function() {var cache_buster_0502;
this.init = function(instance_string) {var cache_buster_0503;
this.counter = 0;
this.instance_array = [];
this.instance_string = instance_string;
};
this.method = function (prevent_inline) {var cache_buster_0504;
if (this.counter > 99)
this.counter = this.counter / 2;
else
this.counter++;
if (prevent_inline) {
var i = 0;
for (i = 0; i < 1; i++) dummy.method();
for (i = 0; i < 1; i++) dummy.method();
for (i = 0; i < 1; i++) dummy.method();
for (i = 0; i < 1; i++) dummy.method();
for (i = 0; i < 1; i++) dummy.method();
for (i = 0; i < 1; i++) dummy.method();
for (i = 0; i < 1; i++) dummy.method();
for (i = 0; i < 1; i++) dummy.method();
for (i = 0; i < 1; i++) dummy.method();
for (i = 0; i < 1; i++) dummy.method();
}
}
});
var ProtoChildA = proto(ProtoParent, function(superclass) {var cache_buster_0505;
this.init = function(instance_string) {var cache_buster_0506;
this.member_a = 1;
superclass.init.call(this, instance_string);
};
this.method = function() {var cache_buster_0507;
this.member_a = -this.member_a;
superclass.method.call(this, false);
}
});
var ProtoChildB = proto(ProtoParent, function(superclass) {var cache_buster_0508;
this.init = function(instance_string) {var cache_buster_0509;
this.member_b = -1;
superclass.init.call(this, instance_string);
};
this.method = function() {var cache_buster_0510;
this.member_b = -this.member_b;
superclass.method.call(this, false);
}
});
var TypeScriptinstanceA = new TypeScriptChildA("a");
var TypeScriptinstanceB = new TypeScriptChildB("b");
var TypeScriptinstanceC = new TypeScriptChildA("c");
var TypeScriptinstanceD = new TypeScriptChildB("d");
var TypeScriptinstanceE = new TypeScriptChildA("e");
var CMBrowserMonoChildinstanceA = new CMBrowserMonoChildA("a");
var CMBrowserMonoChildinstanceB = new CMBrowserMonoChildB("b");
var CMBrowserMonoChildinstanceC = new CMBrowserMonoChildA("c");
var CMBrowserMonoChildinstanceD = new CMBrowserMonoChildB("d");
var CMBrowserMonoChildinstanceE = new CMBrowserMonoChildA("e");
var CMBrowserPolyChildinstanceA = new CMBrowserPolyChildA("a");
var CMBrowserPolyChildinstanceB = new CMBrowserPolyChildB("b");
var CMBrowserPolyChildinstanceC = new CMBrowserPolyChildA("c");
var CMBrowserPolyChildinstanceD = new CMBrowserPolyChildB("d");
var CMBrowserPolyChildinstanceE = new CMBrowserPolyChildA("e");
var CMServerFullrefMonoChildinstanceA = new CMServerFullrefMonoChildA("a");
var CMServerFullrefMonoChildinstanceB = new CMServerFullrefMonoChildB("b");
var CMServerFullrefMonoChildinstanceC = new CMServerFullrefMonoChildA("c");
var CMServerFullrefMonoChildinstanceD = new CMServerFullrefMonoChildB("d");
var CMServerFullrefMonoChildinstanceE = new CMServerFullrefMonoChildA("e");
var CMServerPartialrefMonoChildinstanceA = new CMServerPartialrefMonoChildA("a");
var CMServerPartialrefMonoChildinstanceB = new CMServerPartialrefMonoChildB("b");
var CMServerPartialrefMonoChildinstanceC = new CMServerPartialrefMonoChildA("c");
var CMServerPartialrefMonoChildinstanceD = new CMServerPartialrefMonoChildB("d");
var CMServerPartialrefMonoChildinstanceE = new CMServerPartialrefMonoChildA("e");
var CMServerPartialrefPolyChildinstanceA = new CMServerPartialrefPolyChildA("a");
var CMServerPartialrefPolyChildinstanceB = new CMServerPartialrefPolyChildB("b");
var CMServerPartialrefPolyChildinstanceC = new CMServerPartialrefPolyChildA("c");
var CMServerPartialrefPolyChildinstanceD = new CMServerPartialrefPolyChildB("d");
var CMServerPartialrefPolyChildinstanceE = new CMServerPartialrefPolyChildA("e");
var DNW_IW_ChildinstanceA = new DNW_IW_ChildA("a");
var DNW_IW_ChildinstanceB = new DNW_IW_ChildB("b");
var DNW_IW_ChildinstanceC = new DNW_IW_ChildA("c");
var DNW_IW_ChildinstanceD = new DNW_IW_ChildB("d");
var DNW_IW_ChildinstanceE = new DNW_IW_ChildA("e");
var DNW_FC_ChildinstanceA = new DNW_FC_ChildA("a");
var DNW_FC_ChildinstanceB = new DNW_FC_ChildB("b");
var DNW_FC_ChildinstanceC = new DNW_FC_ChildA("c");
var DNW_FC_ChildinstanceD = new DNW_FC_ChildB("d");
var DNW_FC_ChildinstanceE = new DNW_FC_ChildA("e");
var FiberinstanceA = new FiberChildA("a");
var FiberinstanceB = new FiberChildB("b");
var FiberinstanceC = new FiberChildA("c");
var FiberinstanceD = new FiberChildB("d");
var FiberinstanceE = new FiberChildA("e");
var JohnResiginstanceA = new JRChildA("a");
var JohnResiginstanceB = new JRChildB("b");
var JohnResiginstanceC = new JRChildA("c");
var JohnResiginstanceD = new JRChildB("d");
var JohnResiginstanceE = new JRChildA("e");
var NativeinstanceA = new NativeChildA("a");
var NativeinstanceB = new NativeChildB("b");
var NativeinstanceC = new NativeChildA("c");
var NativeinstanceD = new NativeChildB("d");
var NativeinstanceE = new NativeChildA("e");
var ProtoinstanceA = ProtoChildA("a");
var ProtoinstanceB = ProtoChildB("b");
var ProtoinstanceC = ProtoChildA("c");
var ProtoinstanceD = ProtoChildB("d");
var ProtoinstanceE = ProtoChildA("e");
var modelNames = ["Proto", "TypeScript", "CMServerFullrefMono","CMBrowserPoly","CMServerPartialrefMono","Native","JR","CMServerPartialrefPoly","DNW_IW_","DNW_FC_","Fiber"]
modelNames.forEach(function(name) {
for (var _i = 0; _i < 10; _i++) {
var instance1 = new window[name + "ChildA"]("a");
var instance2 = new window[name + "ChildB"]("b");
for (var i = 0; i < 50; i++) {
instance1.method();
instance2.method();
}
}
})
</script>
Ready to run.
Test | Ops/sec | |
---|---|---|
TypeScript |
| ready |
Lava ClassManager / Browser / Monomorphic |
| ready |
Lava ClassManager / Browser / Polymorphic |
| ready |
Lava ClassManager / Server / Monomorphic / Full |
| ready |
Lava ClassManager / Server / Monomorphic / Partial |
| ready |
Lava ClassManager / Server / Polymorphic / Partial |
| ready |
DotNetWise inheritWith |
| ready |
DotNetWise fastClass |
| ready |
Fiber |
| ready |
John Resig's Class |
| ready |
Native |
| ready |
Proto |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.