Pub/Sub implementations (v16)

Revision 16 of this benchmark created by Aksel on


Description

Fixed test case for Peter Higgins pubsub implementation. Previous tests weren't actually unsubbing properly causing slow performance.

Preparation HTML

<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
  /*    
  
        jQuery pub/sub plugin by Peter Higgins (dante@dojotoolkit.org)
  
        Loosely based on Dojo publish/subscribe API, limited in scope. Rewritten blindly.
  
        Original is (c) Dojo Foundation 2004-2010. Released under either AFL or new BSD, see:
        http://dojofoundation.org/license for more information.
  
  */
  (function($) {
   var topics = {};
  
   $.publish1 = function(topic, args) {
    if (topics[topic]) {
     var currentTopic = topics[topic],
args = args || {};
  
     for (var i = 0, j = currentTopic.length; i < j; i++) {
      currentTopic[i].call($, args);
     }
    }
   };
  
   $.subscribe1 = function(topic, callback) {
    if (!topics[topic]) {
     topics[topic] = [];
    }
  
    topics[topic].push(callback);
  
    return {
     "topic": topic,
     "callback": callback
    };
   };
  
   $.unsubscribe1 = function(handle) {
    var topic = handle.topic;
  
    if (topics[topic]) {
     var currentTopic = topics[topic];
  
     for (var i = 0, j = currentTopic.length; i < j; i++) {
      if (currentTopic[i] === handle.callback) {
       currentTopic.splice(i, 1);
      }
     }
    }
   };
  
  })(jQuery);
  
  /*!
   * jQuery Tiny Pub/Sub - v0.3pre - 11/4/2010
   * http://benalman.com/
   * 
   * Copyright (c) 2010 "Cowboy" Ben Alman
   * Dual licensed under the MIT and GPL licenses.
   * http://benalman.com/about/license/
   */
  /*!
   * jQuery Tiny Pub/Sub - v0.X - 11/18/2010
   * http://benalman.com/
   * 
   * Original Copyright (c) 2010 "Cowboy" Ben Alman
   * Dual licensed under the MIT and GPL licenses.
   * http://benalman.com/about/license/
   *
   * Made awesome by Rick Waldron
   *
   */
  (function(jQuery) {
   var o = jQuery({});
   jQuery.each({
    "subscribe2": "bind",
    "unsubscribe2": "unbind",
    "publish2": "trigger"
   }, function(fn, api) {
    jQuery[fn] = function() {
     o[api].apply(o, arguments);
    };
   });
  })(jQuery);

/**
*jQuery document element
*/
  (function(jQuery) {
   var o = jQuery(document);
   jQuery.each({
    "subscribe25": "bind",
    "unsubscribe25": "unbind",
    "publish25": "trigger"
   }, function(fn, api) {
    jQuery[fn] = function() {
     o[api].apply(o, arguments);
    };
   });
  })(jQuery);


</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Object cache
var handle = $.subscribe1('foo', function() {
 1 + 1;
});

$.publish1('foo', {foo:'bar'});

$.unsubscribe1(handle);
ready
jQuery object element
$.subscribe2('foo', function() {
 1 + 1;
});

$.publish2('foo', {foo:'bar'});

$.unsubscribe2('foo');
ready
jQuery document element
$.subscribe25('foo', function() {
 1 + 1;
});

$.publish25('foo', {foo:'bar'});

$.unsubscribe25('foo');
ready

Revisions

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