Custom event (v2)

Revision 2 of this benchmark created by devu on


Description

Testing different method of implementing custom events

Preparation HTML

<script src="//ajax.googleapis.com/ajax/libs/prototype/1.6.1.0/prototype.js">
</script>
<script>
  //Copyright (c) 2010 Nicholas C. Zakas. All rights reserved.
  //MIT License

  function EventTarget() {
    this._listeners = {};
  }

  EventTarget.prototype = {

    constructor: EventTarget,

    addListener: function(type, listener) {
      if (typeof this._listeners[type] == "undefined") {
        this._listeners[type] = [];
      }

      this._listeners[type].push(listener);
    },

    fire: function(event) {

      if (this._listeners[event.type] instanceof Array) {
        var listeners = Object.extend({}, this._listeners[event.type]);
        for (var i = 0, len = listeners.length; i < len; i++) {
          listeners[i].call(this, event);
        }
      }
    },

    removeListener: function(type, listener) {
      if (this._listeners[type] instanceof Array) {
        var listeners = this._listeners[type];
        for (var i = 0, len = listeners.length; i < len; i++) {
          if (listeners[i] === listener) {
            listeners.splice(i, 1);
            break;
          }
        }
      }
    }
  };

  var target = new EventTarget();
  var c = 0;

  function handleEvent(event) {
    c += event.num;
  };

  target.addListener("foo", handleEvent);
  Event.observe(document, "dom:foo", handleEvent);
  document.addEventListener('foo', handleEvent);

</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Array method
target.fire({
  num: 1
});
ready
Event.observe
document.fire("dom:foo", {
  num: 1
})
ready
Test addEventListener
var event;
if (document.createEvent) {
  event = document.createEvent('HTMLEvents');
  event.initEvent('dataavailable', true, true);
} else {
  event = document.createEventObject();
  event.eventType = bubble ? 'ondataavailable' : 'onfilterchange';
}

event.eventName = "foo";

document.dispatchEvent(event);
ready

Revisions

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

  • Revision 1: published by ciccio on
  • Revision 2: published by devu on