Events vs Events2
JavaScript performance comparison
Preparation code
<script>
var GS = {};
GS.pubSub = function() {
var subscribers = {},
persistentEvents = {};
this.on = function(ev, fn) {
var events = ev.split(",");
events.forEach(function(ev) {
ev = jQuery.trim(ev);
if(typeof subscribers[ev] === "undefined") {
subscribers[ev] = [];
}
subscribers[ev].push(fn);
if(persistentEvents.hasOwnProperty(ev)) {
fn.apply(null, persistentEvents[ev]);
}
});
};
this.once = function(ev, fn) {
var called = false,
callback = function(arg) {
arg = arg || [];
if(!called) {
fn.apply(null, arguments);
called = true;
}
};
GS.on(ev, callback);
};
this.fire = function(ev, arg, persist) {
arg = arg || [];
if(typeof subscribers[ev] !== "undefined") {
subscribers[ev].forEach(function(current) {
current.apply(null, arg);
});
}
if(persist) {
persistentEvents[ev] = arg;
}
};
return this;
};
/* Set up global event queue, hanging pubsub functions on GS */
GS.pubSub.call( GS );
</script>
<script src='//cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js'></script>
<script src='//underscorejs.org/underscore.js'></script>
<script src='//cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min.js'></script>
<script>var oldEvents = Backbone.Events;</script>
<script src='//cdnjs.cloudflare.com/ajax/libs/backbone.js/0.5.3/backbone-min.js'></script>
<script>var olderEvents = Backbone.Events;</script>
<script src='//backbonejs.org/backbone.js'></script>
<script>var masterEvents = Backbone.Events;</script>
<script>
Benchmark.prototype.setup = function() {
old = _.extend({}, oldEvents);
older = _.extend({}, olderEvents);
master = _.extend({}, masterEvents);
jquery = $({});
numEvents = 3;
numListeners = 100;
_.times(numEvents, function(event) {
_.times(numListeners, function() {
older.bind("event" + event, function(){});
old.on("event" + event, function(){});
jquery.on("event" + event, function(){});
master.on("event" + event, function(){});
GS.on("event" + event, function() {});
});
});
};
</script>
Preparation code output
Test runner
Warning! For accurate results, please disable Firebug before running the tests. (Why?)
Java applet disabled.
| Test | Ops/sec | |
|---|---|---|
jQuery 1.8.3 |
|
pending… |
Backbone 0.5.3 |
|
pending… |
Backbone 0.9.2 |
|
pending… |
Backbone 0.9.9 |
|
pending… |
GS |
|
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 1: published
- Revision 2: published by Jeremy Ashkenas
- Revision 3: published by Jeremy Ashkenas
- Revision 4: published by Jeremy Ashkenas
- Revision 5: published
- Revision 6: published
- Revision 7: published
- Revision 8: published by Jeremy Ashkenas
- Revision 9: published
- Revision 10: published by Romain Beauxis
- Revision 12: published
- Revision 14: published
- Revision 15: published
- Revision 16: published by Tim Griesser
- Revision 17: published
- Revision 19: published
- Revision 20: published
- Revision 21: published
- Revision 22: published
- Revision 23: published
- Revision 24: published
- Revision 33: published
- Revision 34: published
- Revision 35: published by stefan
- Revision 36: published by stefan
- Revision 38: published by stefan
0 comments