From 6395aa610fbce612a69cc20f30df80a3869d2b56 Mon Sep 17 00:00:00 2001 From: Yagiz Nizipli Date: Tue, 13 Sep 2022 12:18:56 -0400 Subject: [PATCH] events: improve event performance --- lib/events.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/events.js b/lib/events.js index 7abf18f42c0064..a5b1b058561168 100644 --- a/lib/events.js +++ b/lib/events.js @@ -58,6 +58,9 @@ const { identicalSequenceRange, } = require('internal/util/inspect'); +function NullObject() {} +NullObject.prototype = ObjectCreate(null); + let spliceOne; const { @@ -338,7 +341,7 @@ EventEmitter.init = function(opts) { if (this._events === undefined || this._events === ObjectGetPrototypeOf(this)._events) { - this._events = ObjectCreate(null); + this._events = new NullObject(); this._eventsCount = 0; } @@ -547,7 +550,7 @@ function _addListener(target, type, listener, prepend) { events = target._events; if (events === undefined) { - events = target._events = ObjectCreate(null); + events = target._events = new NullObject(); target._eventsCount = 0; } else { // To avoid recursion in the case that type === "newListener"! Before @@ -685,7 +688,7 @@ EventEmitter.prototype.removeListener = if (list === listener || list.listener === listener) { if (--this._eventsCount === 0) - this._events = ObjectCreate(null); + this._events = new NullObject(); else { delete events[type]; if (events.removeListener) @@ -740,11 +743,11 @@ EventEmitter.prototype.removeAllListeners = // Not listening for removeListener, no need to emit if (events.removeListener === undefined) { if (arguments.length === 0) { - this._events = ObjectCreate(null); + this._events = new NullObject(); this._eventsCount = 0; } else if (events[type] !== undefined) { if (--this._eventsCount === 0) - this._events = ObjectCreate(null); + this._events = new NullObject(); else delete events[type]; } @@ -758,7 +761,7 @@ EventEmitter.prototype.removeAllListeners = this.removeAllListeners(key); } this.removeAllListeners('removeListener'); - this._events = ObjectCreate(null); + this._events = new NullObject(); this._eventsCount = 0; return this; }