Skip to content

Instantly share code, notes, and snippets.

@morphar
Last active December 15, 2015 22:59
Show Gist options
  • Save morphar/5336708 to your computer and use it in GitHub Desktop.
Save morphar/5336708 to your computer and use it in GitHub Desktop.
A quick test to get some rough performance numbers for events. roughly these are the numbers: no events = 52ms, with events + self listener = 432ms, with events but no listeners = 1203ms, with events and checks for listeners = 1081ms. Speed difference from no events to with events are from x 8.3 to x 23.1!!!
var util = require('util');
var events = require('events');
var testRuns = 10000000;
// A class without event emitter
var BlaClass0 = function() { };
BlaClass0.prototype.doCalc = function() {
var bla = 3.14 * 1234567890;
return bla;
};
// A class with an event emitter, that listens for it's own 'result' event
var BlaClass1 = function() {
events.EventEmitter.call(this);
this.on('result', function() {});
};
util.inherits(BlaClass1, events.EventEmitter);
BlaClass1.prototype.doCalc = function() {
var bla = 3.14 * 1234567890;
this.emit('result', bla);
};
// A similar class with an event emitter, that DOES NOT listen for it's own 'result' event
var BlaClass2 = function() {
events.EventEmitter.call(this);
};
util.inherits(BlaClass2, events.EventEmitter);
BlaClass2.prototype.doCalc = function() {
var bla = 3.14 * 1234567890;
this.emit('result', bla);
};
// A class with an event emitter, that checks for listeners before emitting
var BlaClass3 = function() {
events.EventEmitter.call(this);
};
util.inherits(BlaClass3, events.EventEmitter);
BlaClass3.prototype.doCalc = function() {
var bla = 3.14 * 1234567890;
if(this.listeners('result').length > 0) {
this.emit('result', bla);
}
};
var blaClass0 = new BlaClass0();
console.time('blaClass0.doCalc');
for(var i=0 ; i < testRuns ; i++) {
blaClass0.doCalc();
}
console.timeEnd('blaClass0.doCalc');
var blaClass1 = new BlaClass1();
console.time('blaClass1.doCalc');
for(var i=0 ; i < testRuns ; i++) {
blaClass1.doCalc();
}
console.timeEnd('blaClass1.doCalc');
var blaClass2 = new BlaClass2();
console.time('blaClass2.doCalc');
for(var i=0 ; i < testRuns ; i++) {
blaClass2.doCalc();
}
console.timeEnd('blaClass2.doCalc');
var blaClass3 = new BlaClass3();
console.time('blaClass3.doCalc');
for(var i=0 ; i < testRuns ; i++) {
blaClass3.doCalc();
}
console.timeEnd('blaClass3.doCalc');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment