summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2012-08-01 01:21:46 +0200
committerBen Noordhuis <info@bnoordhuis.nl>2012-09-22 03:48:59 +0200
commitb7fd55e9a0fe78d9c258039de51fc38f1ce5a74d (patch)
treeb4a2383f7fa30fee2b6e3983ba2add91f585be99
parent84221fd1d690070877adacd365ac6429b92bd838 (diff)
downloadnode-b7fd55e9a0fe78d9c258039de51fc38f1ce5a74d.tar.gz
events: speed up newListener/removeListener events
-rw-r--r--lib/events.js16
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/events.js b/lib/events.js
index ee02f15af..732f16872 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;