You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.0 KiB
83 lines
2.0 KiB
'use strict'; |
|
|
|
// Benchmark comparing performance of event emit for many listeners |
|
// To run it, do following in memoizee package path: |
|
// |
|
// $ npm install eventemitter2 signals |
|
// $ node benchmark/many-on.js |
|
|
|
var forEach = require('es5-ext/object/for-each') |
|
, pad = require('es5-ext/string/#/pad') |
|
|
|
, now = Date.now |
|
|
|
, time, count = 1000000, i, data = {} |
|
, ee, native, ee2, signals, a = {}, b = {}; |
|
|
|
ee = (function () { |
|
var ee = require('../')(); |
|
ee.on('test', function () { return arguments; }); |
|
ee.on('test', function () { return arguments; }); |
|
return ee.on('test', function () { return arguments; }); |
|
}()); |
|
|
|
native = (function () { |
|
var ee = require('events'); |
|
ee = new ee.EventEmitter(); |
|
ee.on('test', function () { return arguments; }); |
|
ee.on('test', function () { return arguments; }); |
|
return ee.on('test', function () { return arguments; }); |
|
}()); |
|
|
|
ee2 = (function () { |
|
var ee = require('eventemitter2'); |
|
ee = new ee.EventEmitter2(); |
|
ee.on('test', function () { return arguments; }); |
|
ee.on('test', function () { return arguments; }); |
|
return ee.on('test', function () { return arguments; }); |
|
}()); |
|
|
|
signals = (function () { |
|
var Signal = require('signals') |
|
, ee = { test: new Signal() }; |
|
ee.test.add(function () { return arguments; }); |
|
ee.test.add(function () { return arguments; }); |
|
ee.test.add(function () { return arguments; }); |
|
return ee; |
|
}()); |
|
|
|
console.log("Emit for 3 listeners", "x" + count + ":\n"); |
|
|
|
i = count; |
|
time = now(); |
|
while (i--) { |
|
ee.emit('test', a, b); |
|
} |
|
data["event-emitter (this implementation)"] = now() - time; |
|
|
|
i = count; |
|
time = now(); |
|
while (i--) { |
|
native.emit('test', a, b); |
|
} |
|
data["EventEmitter (Node.js native)"] = now() - time; |
|
|
|
i = count; |
|
time = now(); |
|
while (i--) { |
|
ee2.emit('test', a, b); |
|
} |
|
data.EventEmitter2 = now() - time; |
|
|
|
i = count; |
|
time = now(); |
|
while (i--) { |
|
signals.test.dispatch(a, b); |
|
} |
|
data.Signals = now() - time; |
|
|
|
forEach(data, function (value, name, obj, index) { |
|
console.log(index + 1 + ":", pad.call(value, " ", 5), name); |
|
}, null, function (a, b) { |
|
return this[a] - this[b]; |
|
});
|
|
|