Skip to content
This repository was archived by the owner on Apr 22, 2023. It is now read-only.

Commit ca3a08d

Browse files
committed
Extend fast cases to multiple listeners.
Previously, only the case with 1 listener was optimized for less than 3 event arguments. This is now extended to any number of listeners.
1 parent e4d4c98 commit ca3a08d

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

lib/events.js

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -117,15 +117,30 @@ EventEmitter.prototype.emit = function emit(type, arg1, arg2) {
117117
args[i - 1] = arguments[i];
118118
handler.apply(this, args);
119119
}
120-
} else if (util.isObject(handler)) {
121-
args = new Array(len - 1);
122-
for (i = 1; i < len; i++)
123-
args[i - 1] = arguments[i];
124-
120+
} else if (util.isArray(handler)) {
125121
listeners = handler.slice();
126-
len = listeners.length;
127-
for (i = 0; i < len; i++)
128-
listeners[i].apply(this, args);
122+
switch (len) {
123+
// fast cases
124+
case 1:
125+
for (i = 0, len = listeners.length; i < len; i++)
126+
listeners[i].call(this);
127+
break;
128+
case 2:
129+
for (i = 0, len = listeners.length; i < len; i++)
130+
listeners[i].call(this, arg1);
131+
break;
132+
case 3:
133+
for (i = 0, len = listeners.length; i < len; i++)
134+
listeners[i].call(this, arg1, arg2);
135+
break;
136+
// slower
137+
default:
138+
args = new Array(len - 1);
139+
for (i = 1; i < len; i++)
140+
args[i - 1] = arguments[i];
141+
for (i = 0, len = listeners.length; i < len; i++)
142+
listeners[i].apply(this, args);
143+
}
129144
}
130145

131146
if (this.domain && this !== process)

0 commit comments

Comments
 (0)