PubSubJS vs. jQuery custom events
JavaScript performance comparison
Info
An attempt at showing that PubSubJS is faster than using jQuery custom evens for publish/subscribe style messaging.
It's certainly not as rich in features, and I am happy with that.
Preparation code
<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="https://github.com/mroderick/PubSubJS/raw/master/pubsub.min.js"></script>
<script>
var callback1 = function(event) {
return false;
};
var callback2 = function() {};
var payload = {
somekey: 'some value'
};
var body;
var someJqueryObject = $({});
// let's use jQuery.ready to make sure that the DOM is ready,
// before trying to work with it
jQuery(function() {
// we'll use the body element to exchange messages for jQuery
// if using deeper nested elements, jQuery will be slower, as custom events bubble
body = $('body');
// subscribe our callback1 function to the custom event for jQuery, only once
body.bind('my-event', callback1);
// subscribe our callback1 function to the custom event for the plain jQuery object (non-DOM)
someJqueryObject.bind('my-event', callback1);
// subscribe our callback2 function to the message for PubSub
PubSub.subscribe('my-event', callback2)
// Use document instead of 'body' as the anchor for custom events
doc = $(document)
});
</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 DOM - trigger |
|
pending… |
jQuery Object - trigger |
|
pending… |
PubSub - publish - asyncronous |
|
pending… |
PubSub - publish - syncronous |
|
pending… |
jQuery document - trigger |
|
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 by Morgan Roderick
- Revision 3: published by Morgan Roderick
- Revision 4: published
- Revision 5: published by Stephen Crosby
- Revision 6: published by Andrew Betts
- Revision 8: published
- Revision 11: published
- Revision 12: published by Morgan Roderick
- Revision 18: published
- Revision 19: published
- Revision 20: published
- Revision 21: published
- Revision 22: published by Richard and last updated
- Revision 24: published by Hiroshi Kuwabara
- Revision 25: published
- Revision 26: published by s0ber
- Revision 30: published by Jakeb
- Revision 31: published by Jakeb
- Revision 34: published by pmelande
- Revision 36: published by pmelande
- Revision 37: published by pmelande
- Revision 39: published by Jakeb
- Revision 40: published by Jakeb
- Revision 41: published by pmelande
- Revision 43: published by Morgan Roderick
- Revision 44: published by Jakeb
- Revision 47: published by asyraf
- Revision 50: published by pmelande
- Revision 51: published by pmelande
- Revision 52: published by Jakeb
- Revision 53: published
- Revision 54: published
- Revision 55: published
- Revision 56: published by Anas Nakawa
- Revision 57: published
- Revision 58: published
- Revision 59: published by Burke
- Revision 60: published by Tobias Haustein
- Revision 62: published by vlazar
- Revision 64: published by Stuart
- Revision 66: published by Brandon Papworth
- Revision 67: published
- Revision 68: published
- Revision 69: published
- Revision 70: published
- Revision 73: published
- Revision 74: published
- Revision 75: published by Wojciech Dłubacz
- Revision 76: published
- Revision 77: published
- Revision 78: published by Wojciech Dłubacz
- Revision 79: published
- Revision 80: published by Sparda
- Revision 82: published
- Revision 83: published by Bruno
- Revision 85: published
- Revision 86: published
- Revision 87: published
- Revision 88: published
- Revision 89: published
- Revision 90: published
- Revision 91: published
- Revision 92: published by Caleb Gilbert
- Revision 93: published
- Revision 94: published
- Revision 95: published
- Revision 97: published by Brandon Papworth
- Revision 99: published
- Revision 100: published
- Revision 101: published
- Revision 102: published
1 comment
Added a test for jQuery custom events using the
documentobject rather than an element. Basically equivalent to using an element, but worth including as many tutorials on custom events advise firing the event on thedocumentobject.