From b7fd55e9a0fe78d9c258039de51fc38f1ce5a74d Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Wed, 1 Aug 2012 01:21:46 +0200 Subject: [PATCH] events: speed up newListener/removeListener events --- lib/events.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/events.js b/lib/events.js index ee02f15af6c..732f16872aa 100644 --- a/lib/events.js +++ b/lib/events.js @@ -133,8 +133,10 @@ EventEmitter.prototype.addListener = function(type, listener) { // To avoid recursion in the case that type == "newListeners"! Before // adding it to the listeners, first emit "newListeners". - this.emit('newListener', type, typeof listener.listener === 'function' ? - listener.listener : listener); + if (this._events.newListener) { + this.emit('newListener', type, typeof listener.listener === 'function' ? + listener.listener : listener); + } if (!this._events[type]) { // Optimize the case of one listener. Don't need the extra array object. @@ -217,12 +219,18 @@ EventEmitter.prototype.removeListener = function(type, listener) { list.splice(position, 1); if (list.length == 0) delete this._events[type]; - this.emit('removeListener', type, listener); + + if (this._events.removeListener) { + this.emit('removeListener', type, listener); + } } else if (list === listener || (list.listener && list.listener === listener)) { delete this._events[type]; - this.emit('removeListener', type, listener); + + if (this._events.removeListener) { + this.emit('removeListener', type, listener); + } } return this;