Skip to content

Instantly share code, notes, and snippets.

@danielstjules
Last active August 29, 2015 13:56
Show Gist options
  • Save danielstjules/9218635 to your computer and use it in GitHub Desktop.
Save danielstjules/9218635 to your computer and use it in GitHub Desktop.
String event benchmark of RegexEmitter, PatternEmitter and EventEmitter
/**
* Quick comparison
*/
var Benchmark = require('benchmark');
var EventEmitter = require('events').EventEmitter;
var PatternEmitter = require('pattern-emitter');
var RegexEmitter = require('regexemitter');
var suite = new Benchmark.Suite();
var eventEmitter = new EventEmitter();
var regexEmitter = new RegexEmitter();
var patternEmitter = new PatternEmitter();
// Regex emitter prevents you from adding more than maxListeners
regexEmitter.setMaxListeners(10000000);
// Prevent warning
patternEmitter.setMaxListeners(10000000);
var i, j;
// Setup all emitters with 10 listeners on each of 10 events
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
eventEmitter.on('event:' + i, function() {
// Do nothing
});
}
}
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
regexEmitter.on('event:' + i, function() {
// Do nothing
});
}
}
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
patternEmitter.on('event:' + i, function() {
// Do nothing
});
}
}
suite.add('EventEmitter', function() {
for (i = 0; i < 10; i++) {
eventEmitter.emit('event:' + i);
}
})
.add('RegexEmitter', function() {
for (i = 0; i < 10; i++) {
regexEmitter.emit('event:' + i);
}
})
.add('PatternEmitter', function() {
for (i = 0; i < 10; i++) {
patternEmitter.emit('event:' + i);
}
})
.on('cycle', function(event) {
console.log(String(event.target));
})
.run();
// $ node test.js
// EventEmitter x 205,078 ops/sec ±1.01% (100 runs sampled)
// RegexEmitter x 4,471 ops/sec ±0.57% (101 runs sampled)
// PatternEmitter x 163,950 ops/sec ±1.07% (100 runs sampled)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment