Emitter...

Benchmark created on


Setup


class EmitterForEach {
  listeners = [];
  emit(evt) {
    this.listeners.forEach(fn => {
      fn(evt);
    });
  }
}

class EmitterForVar {
  listeners = [];
  emit(evt) {
    for (var i = 0, l = this.listeners.length; i < l; i++) {
      this.listeners[i](evt);
    }
  }
}

class EmitterForLet {
  listeners = [];
  emit(evt) {
    for (let i = 0, l = this.listeners.length; i < l; i++) {
      this.listeners[i](evt);
    }
  }
}

function make1handler() {
  var handler1_counter = 0
  function handler1(evt) { handler1_counter++; }
  return handler1;
}

function make2handlers() {
  var handler1_counter = 0
  function handler1(evt) { handler1_counter++; }
  var handler2_counter = 0
  var handler2 = (evt) => { handler2_counter++; }
  return [handler1, handler2];
}

function make20handlers() {
  var handler1_counter = 0
  function handler1(evt) { handler1_counter++; }

  var handler2_counter = 0
  function handler2(evt) { handler2_counter = evt.q; }

  var handler3_counter = 0
  function handler3(evt) { handler3_counter = evt.w; }

  var handler4_counter = 0
  function handler4(evt) { handler4_counter = evt.w + evt.q; }

  var block = [handler1, handler2, handler3, handler4];

  return [].concat(block).concat(block).concat(block).concat(block).concat(block);
}

function emit100times(emitter) {
  for (var i = 0; i < 100; i++) {
    var evt = { q: i, w: Math.random(), e: Math.random() };
    emitter.emit(evt);
  }
}

var emitterForEach_1 = new EmitterForEach();
var emitterForVar_1 = new EmitterForVar();
var emitterForLet_1 = new EmitterForLet();
var e1 = [emitterForEach_1, emitterForVar_1, emitterForLet_1];
var h1 = make1handler();
e1.forEach(e => e.listeners.push(h1));

var emitterForEach_2 = new EmitterForEach();
var emitterForVar_2 = new EmitterForVar();
var emitterForLet_2 = new EmitterForLet();
var e2 = [emitterForEach_2, emitterForVar_2, emitterForLet_2];
var h2 = make2handlers();
e2.forEach(e => h2.forEach(h => e.listeners.push(h)));

var emitterForEach_3 = new EmitterForEach();
var emitterForVar_3 = new EmitterForVar();
var emitterForLet_3 = new EmitterForLet();
var e3 = [emitterForEach_3, emitterForVar_3, emitterForLet_3];
var h3 = make20handlers();
e3.forEach(e => h3.forEach(h => e.listeners.push(h)));


emit100times(emitterForEach_1);
emit100times(emitterForVar_1);
emit100times(emitterForLet_1);
emit100times(emitterForEach_2);
emit100times(emitterForVar_2);
emit100times(emitterForLet_2);
emit100times(emitterForEach_3);
emit100times(emitterForVar_3);
emit100times(emitterForLet_3);

Test runner

Ready to run.

Testing in
TestOps/sec
emitterForEach_1
emit100times(emitterForEach_1);
ready
emitterForVar_1

emit100times(emitterForVar_1);
ready
emitterForLet_1
emit100times(emitterForLet_1);
ready
emitterForEach_2
emit100times(emitterForEach_2);
ready
emitterForVar_2
emit100times(emitterForVar_2);
ready
emitterForLet_2
emit100times(emitterForLet_2);
ready
emitterForEach_3
emit100times(emitterForEach_3);
ready
emitterForVar_3
emit100times(emitterForVar_3);
ready
emitterForLet_3

emit100times(emitterForLet_3);
ready

Revisions

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