A Comparison of JS Publish/Subscribe Approaches (v30)

Revision 30 of this benchmark created by Jakeb on


Description

A Comparison of JS Publish/Subscribe Approaches

More info: publish/subscribe on Wikipedia.

Compared:

Preparation HTML

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js" type="text/javascript">
</script>
<script src="https://raw.github.com/mroderick/PubSubJS/master/src/pubsub.js" type="text/javascript">
</script>
<script src="https://raw.github.com/kuwabarahiroshi/bloody-jquery-plugins/master/pubsub.js" type="text/javascript">
</script>
<script src="https://raw.github.com/phiggins42/bloody-jquery-plugins/55e41df9bf08f42378bb08b93efcb28555b61aeb/pubsub.js" type="text/javascript">
</script>
<script src="https://raw.github.com/gist/1695338/736bcf94f9226d975fce3ad4f2bc08ccbf176bad/pubsub.js" type="text/javascript">
</script>
<script src="https://raw.github.com/appendto/amplify/master/core/amplify.core.js" type="text/javascript">
</script>
<script src="https://raw.github.com/maccman/spine/master/lib/spine.js" type="text/javascript">
</script>
<script src="https://raw.github.com/richardscarrott/ply/master/src/core.js" type="text/javascript">
</script>
<script src="https://raw.github.com/jrburke/requirejs/master/require.js" type="text/javascript">
</script>
<script type="text/javascript">
window.callback = function () {};
window.payload = {
  somekey: 'some value'
};
var Observer = jQuery({});

jQuery(function() {
 require(["https://raw.github.com/jkroso/Observer/master/lib/Observer.js"], function(Hyraki){
  window.hyraki = new Hyraki()
  for (var i = 0; i < 10; i++) {
    Observer.on('my-event-' + i, callback);
    PubSub.subscribe('my-event-' + i, callback);
    jQuery.subscribe('my-event-' + i, callback);
    Events.subscribe('my-event-' + i, callback);
    App.subscribe('my-event-' + i, callback);
    amplify.subscribe('my-event-' + i, callback);
    Spine.bind('my-event-' + i, callback);
    Ply.core.listen('my-event-' + i, callback);
    hyraki.on('my-event-' + i, callback);
  }
})
});

</script>

Test runner

Ready to run.

Testing in
TestOps/sec
jQuery Events
Observer.trigger('my-event-9', payload);
 
ready
PubSubJS
PubSub.publish('my-event-9', payload);
ready
jQuery PubSub plugin
$.publish('my-event-9', [payload]);
ready
Pure JS PubSub
Events.publish('my-event-9', [payload]);
ready
Darcy Clarke
App.publish('my-event-9', [payload]);
ready
Amplify Pub/Sub
amplify.publish('my-event-9', payload);
ready
Spine Events
Spine.trigger('my-event-9', payload);
ready
Ply Notify/Listen
Ply.core.notify('my-event-9', window, payload);
ready
hyraki
hyraki.publish('my-event-9', payload);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.