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
MooTools and Ext Core are removed because they add extra information into native classes. They slow down other libraries.
Please note that JSFace inheritance model does not play well with the native instanceof. Thats also why it is faster in firefox than any other library.
TODO: - Add YUI
<script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/jsface.js"></script>
<script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/my.class.js"></script>
<script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/jrclass.js"></script>
<script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/klass.js"></script>
<script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/classy.js"></script>
<script src="http://dl.dropbox.com/u/7677927/oop-benchmark/lib/ptclass.js"></script>
<script src="http://dl.dropbox.com/u/7677927/oop-benchmark/all.js"></script>
<script src="http://indigounited.com/dejavu/dejavu.js"></script>
var dejavuClassPerson = dejavu.Class.declare({
initialize: function(name){
this.name = name;
},
setAddress: function(country, city, street) {
this.country = country;
this.city = city;
this.street = street;
}
});
var dejavuClassFrenchGuy = dejavu.Class.declare({
$extends: dejavuClassPerson,
setAddress: function(city, street) {
this.$super('France', city, street);
}
});
var dejavuClassParisLover = dejavu.Class.declare({
$extends: dejavuClassFrenchGuy,
setAddress: function(street) {
this.$super('Paris', street);
}
});
var dejavuClassPerson2 = dejavu.Class.declare(function () {
return {
initialize: function(name){
this.name = name;
},
setAddress: function(country, city, street) {
this.country = country;
this.city = city;
this.street = street;
}
};
}, true);
var dejavuClassFrenchGuy2 = dejavuClassPerson2.extend(function ($super) {
return {
setAddress: function(city, street) {
$super.setAddress.call(this, 'France', city, street);
}
};
}, true);
var dejavuClassParisLover2 = dejavuClassFrenchGuy2.extend(function ($super) {
return {
setAddress: function(street) {
$super.setAddress.call(this, 'Paris', street);
}
};
}, true);
// inherits copied from npm package
function inherits (c, p, proto) {
function F () { this.constructor = c; }
F.prototype = p.prototype;
var e = {};
for (var i in c.prototype) if (c.prototype.hasOwnProperty(i)) {
e[i] = c.prototype[i];
}
if (proto) for (var i in proto) if (proto.hasOwnProperty(i)) {
e[i] = proto[i];
}
c.prototype = new F();
for (var i in e) if (e.hasOwnProperty(i)) {
c.prototype[i] = e[i];
}
c['super'] = p;
}
var VanillaPerson = function (name) {
this.name = name;
};
VanillaPerson.prototype.setAddress = function(country, city, street) {
this.country = country;
this.city = city;
this.street = street;
};
var VanillaFrenchGuy = function (name) {
VanillaPerson.call(this, name);
};
inherits(VanillaFrenchGuy, VanillaPerson);
VanillaFrenchGuy.prototype.setAddress = function (city, street) {
VanillaPerson.prototype.setAddress.call(this, 'France', city, street);
};
var VanillaParisLover = function (name) {
VanillaFrenchGuy.call(this, name);
};
inherits(VanillaParisLover, VanillaFrenchGuy);
VanillaParisLover.prototype.setAddress = function (street) {
VanillaFrenchGuy.prototype.setAddress.call(this, 'Paris', street);
};
Ready to run.
Test | Ops/sec | |
---|---|---|
vanilla |
| ready |
dejavu (after optimization) |
| ready |
dejavu |
| ready |
JSFace |
| ready |
my.Class |
| ready |
John Resig Class |
| ready |
Klass |
| ready |
Classy |
| ready |
PTClass |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.