Skip to content

Commit d3e3ade

Browse files
committed
events: improve on() performance
1 parent 8366e7e commit d3e3ade

File tree

2 files changed

+14
-12
lines changed

2 files changed

+14
-12
lines changed

benchmark/events/ee-add-remove.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,26 @@
22
var common = require('../common.js');
33
var events = require('events');
44

5-
var bench = common.createBenchmark(main, {n: [25e4]});
5+
var bench = common.createBenchmark(main, {n: [25e4], listeners: [10]});
66

77
function main(conf) {
88
var n = conf.n | 0;
9+
var listeners = conf.listeners | 0;
910

1011
var ee = new events.EventEmitter();
11-
var listeners = [];
12+
ee.setMaxListeners(listeners + 1);
13+
var fns = [];
1214

1315
var k;
14-
for (k = 0; k < 10; k += 1)
15-
listeners.push(function() {});
16+
for (k = 0; k < listeners; k += 1)
17+
fns.push(function() { return 0; });
1618

1719
bench.start();
1820
for (var i = 0; i < n; i += 1) {
19-
for (k = listeners.length; --k >= 0; /* empty */)
20-
ee.on('dummy', listeners[k]);
21-
for (k = listeners.length; --k >= 0; /* empty */)
22-
ee.removeListener('dummy', listeners[k]);
21+
for (k = listeners; --k >= 0; /* empty */)
22+
ee.on('dummy', fns[k]);
23+
for (k = listeners; --k >= 0; /* empty */)
24+
ee.removeListener('dummy', fns[k]);
2325
}
2426
bench.end(n);
2527
}

lib/events.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,10 @@ EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
8686
};
8787

8888
function $getMaxListeners(that) {
89-
if (that._maxListeners === undefined)
89+
const maxListeners = that._maxListeners;
90+
if (maxListeners === undefined)
9091
return EventEmitter.defaultMaxListeners;
91-
return that._maxListeners;
92+
return maxListeners;
9293
}
9394

9495
EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
@@ -230,7 +231,6 @@ EventEmitter.prototype.emit = function emit(type) {
230231
};
231232

232233
function _addListener(target, type, listener, prepend) {
233-
var m;
234234
var events;
235235
var existing;
236236

@@ -275,7 +275,7 @@ function _addListener(target, type, listener, prepend) {
275275

276276
// Check for listener leak
277277
if (!existing.warned) {
278-
m = $getMaxListeners(target);
278+
const m = $getMaxListeners(target);
279279
if (m && m > 0 && existing.length > m) {
280280
existing.warned = true;
281281
const w = new Error('Possible EventEmitter memory leak detected. ' +

0 commit comments

Comments
 (0)