Custom event

Benchmark created by ciccio 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