JavaScript Object Oriented Libraries Benchmark
JavaScript performance comparison
Info
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
Preparation code
<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>
<script>
Benchmark.prototype.setup = function() {
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);
};
};
</script>
Preparation code output
Test runner
Warning! For accurate results, please disable Firebug before running the tests. (Why?)
Java applet disabled.
| Test | Ops/sec | |
|---|---|---|
vanilla |
|
pending… |
dejavu (after optimization) |
|
pending… |
dejavu |
|
pending… |
JSFace |
|
pending… |
my.Class |
|
pending… |
John Resig Class |
|
pending… |
Klass |
|
pending… |
Classy |
|
pending… |
PTClass |
|
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. Here’s a list of current revisions for this page:
- Revision 3: published by Tan Nhu
- Revision 4: published
- Revision 5: published by Tan Nhu
- Revision 6: published by Tan Nhu
- Revision 7: published by Tan Nhu
- Revision 8: published by Tan Nhu
- Revision 9: published by Tan Nhu
- Revision 10: published by Tan Nhu
- Revision 11: published by André Cruz
- Revision 13: published by André Cruz
- Revision 14: published
- Revision 15: published by Tan Nhu
- Revision 16: published
- Revision 17: published
- Revision 18: published
- Revision 19: published
- Revision 21: published
- Revision 22: published
- Revision 25: published
- Revision 27: published
- Revision 28: published
- Revision 29: published
- Revision 38: published
- Revision 39: published
- Revision 40: published
- Revision 41: published
- Revision 51: published by André Cruz
- Revision 52: published by André Cruz
- Revision 54: published by André Cruz
- Revision 58: published by André Cruz
- Revision 61: published by Nodir Turakulov
- Revision 62: published by Airy
- Revision 64: published
- Revision 69: published
- Revision 70: published by André Cruz
- Revision 77: published by André Cruz
- Revision 79: published by André Cruz
- Revision 83: published
- Revision 84: published by Aadit M Shah
- Revision 85: published by Aadit M Shah
- Revision 86: published by Yuan Tao
- Revision 88: published
- Revision 89: published by Aadit M Shah
- Revision 90: published by Yuan Tao
- Revision 91: published by Aadit M Shah
- Revision 92: published by Yuan Tao
- Revision 93: published by Yuan Tao
- Revision 94: published by Aadit M Shah
- Revision 95: published by Aadit M Shah
- Revision 96: published by Yuan Tao
- Revision 97: published by Aadit M Shah
- Revision 98: published by Yuan Tao
- Revision 100: published by Yuan Tao
- Revision 104: published
- Revision 105: published by Aadit M Shah
- Revision 106: published by Yuan Tao
- Revision 107: published by André Cruz
- Revision 108: published by Aadit M Shah
- Revision 109: published by Mark Johnson
- Revision 110: published by Mark Johnson
- Revision 111: published by Mark Johnson
- Revision 112: published
- Revision 113: published
- Revision 117: published by Aadit M Shah
- Revision 118: published by Aadit M Shah
- Revision 119: published by Yannick Albert and last updated
- Revision 122: published
- Revision 124: published
- Revision 127: published by Aadit M Shah
- Revision 128: published
0 comments