Skip to content

Commit 982415a

Browse files
committed
Restructured code to reduce the number of allocations during dispatch.
1 parent 0ab788e commit 982415a

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

EventListenerManager.js

+9-5
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,20 @@ export default class EventListenerManager {
5050
// We hope to process results synchronously if possibly,
5151
// so this method must not be "async".
5252
dispatchWithDetails(...args) {
53-
const listeners = Array.from(this._listeners);
54-
const results = listeners.map(listener => {
53+
const results = Array(this._listeners.size);
54+
let index = 0;
55+
56+
for (let listener of this._listeners) {
5557
const startAt = EventListenerManager.debug && Date.now();
5658
const timer = EventListenerManager.debug && setTimeout(() => {
5759
const listenerAddedStack = this._stacksOnListenerAdded.get(listener);
5860
console.log(`listener does not respond in ${TIMEOUT}ms.\n----------------------\n${listenerAddedStack || 'non debug mode or already removed listener:\n'+listener.toString()}\n----------------------\n${new Error().stack}\n----------------------\nargs:`, args);
5961
}, TIMEOUT);
62+
6063
try {
6164
const result = listener(...args);
6265
if (result instanceof Promise)
63-
return result
66+
results[index++] = result
6467
.catch(e => {
6568
console.log(e);
6669
})
@@ -76,7 +79,7 @@ export default class EventListenerManager {
7679
});
7780
if (timer)
7881
clearTimeout(timer);
79-
return {
82+
results[index++] = {
8083
value: result,
8184
elapsed: EventListenerManager.debug && (Date.now() - startAt),
8285
async: false,
@@ -88,7 +91,8 @@ export default class EventListenerManager {
8891
if (timer)
8992
clearTimeout(timer);
9093
}
91-
});
94+
}
95+
9296
if (results.some(result => result instanceof Promise))
9397
return Promise.all(results);
9498
else

0 commit comments

Comments
 (0)