From a49d74b4566e2e4b5b8fba34a240f9da1de511c5 Mon Sep 17 00:00:00 2001 From: zirkelc Date: Tue, 22 Sep 2026 19:31:38 +0200 Subject: [PATCH] perf(event-target): create the listeners map on first use --- cjs/interface/event-target.js | 11 +++++------ esm/interface/event-target.js | 11 +++++------ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/cjs/interface/event-target.js b/cjs/interface/event-target.js index 450b3d63..c0626a80 100644 --- a/cjs/interface/event-target.js +++ b/cjs/interface/event-target.js @@ -41,10 +41,6 @@ function invokeListeners({currentTarget, target}) { */ class DOMEventTarget { - constructor() { - wm.set(this, new Map); - } - /** * @protected */ @@ -53,7 +49,10 @@ class DOMEventTarget { } addEventListener(type, listener, options) { - const map = wm.get(this); + // the listeners map is created on demand: most nodes never get a listener + let map = wm.get(this); + if (!map) + wm.set(this, map = new Map); if (!map.has(type)) map.set(type, new Map); map.get(type).set(listener, options); @@ -61,7 +60,7 @@ class DOMEventTarget { removeEventListener(type, listener) { const map = wm.get(this); - if (map.has(type)) { + if (map && map.has(type)) { const listeners = map.get(type); if (listeners.delete(listener) && !listeners.size) map.delete(type); diff --git a/esm/interface/event-target.js b/esm/interface/event-target.js index edffded1..9ad0528d 100644 --- a/esm/interface/event-target.js +++ b/esm/interface/event-target.js @@ -40,10 +40,6 @@ function invokeListeners({currentTarget, target}) { */ class DOMEventTarget { - constructor() { - wm.set(this, new Map); - } - /** * @protected */ @@ -52,7 +48,10 @@ class DOMEventTarget { } addEventListener(type, listener, options) { - const map = wm.get(this); + // the listeners map is created on demand: most nodes never get a listener + let map = wm.get(this); + if (!map) + wm.set(this, map = new Map); if (!map.has(type)) map.set(type, new Map); map.get(type).set(listener, options); @@ -60,7 +59,7 @@ class DOMEventTarget { removeEventListener(type, listener) { const map = wm.get(this); - if (map.has(type)) { + if (map && map.has(type)) { const listeners = map.get(type); if (listeners.delete(listener) && !listeners.size) map.delete(type);