From 854d83077fb683ee680e8ba251a8cf4ec512b9bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20=C5=81=C4=85giewka?= Date: Mon, 13 Jul 2026 13:34:40 +0200 Subject: [PATCH 1/2] lib: inline createEvent hybrid dispatch closure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Originally added in 16b11cd2adaa5f60382a7f205f893f38a5061fff, it first had three callers. Now there's only one branch requireing it. Signed-off-by: Szymon Łągiewka --- lib/internal/event_target.js | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/lib/internal/event_target.js b/lib/internal/event_target.js index 5a4f7c02909464..3280bfbc0d2f74 100644 --- a/lib/internal/event_target.js +++ b/lib/internal/event_target.js @@ -791,14 +791,6 @@ class EventTarget { } [kHybridDispatch](nodeValue, type, event) { - const createEvent = () => { - if (event === undefined) { - event = this[kCreateEvent](nodeValue, type); - event[kTarget] = this; - event[kIsBeingDispatched] = true; - } - return event; - }; if (event !== undefined) { event[kTarget] = this; event[kIsBeingDispatched] = true; @@ -844,7 +836,12 @@ class EventTarget { if (handler.isNodeStyleListener) { arg = nodeValue; } else { - arg = createEvent(); + if (event === undefined) { + event = this[kCreateEvent](nodeValue, type); + event[kTarget] = this; + event[kIsBeingDispatched] = true; + } + arg = event; } const callback = handler.weak ? handler.callback.deref() : handler.callback; From 1633b2fc02b82cd34ebe28f025d8b15d849b751d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20=C5=81=C4=85giewka?= Date: Mon, 13 Jul 2026 13:37:33 +0200 Subject: [PATCH 2/2] lib: inline iterationCondition hybrid dispatch closure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit While more readable, the removed closure overhead unlocks 10-20% in eventtarget.js benchmark. Signed-off-by: Szymon Łągiewka --- lib/internal/event_target.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/lib/internal/event_target.js b/lib/internal/event_target.js index 3280bfbc0d2f74..bfb948bb1ced1e 100644 --- a/lib/internal/event_target.js +++ b/lib/internal/event_target.js @@ -806,13 +806,8 @@ class EventTarget { let handler = root.next; let next; - const iterationCondition = () => { - if (handler === undefined) { - return false; - } - return root.resistStopPropagation || handler.passive || event?.[kStop] !== true; - }; - while (iterationCondition()) { + while (handler !== undefined && + (root.resistStopPropagation || handler.passive || event?.[kStop] !== true)) { // Cache the next item in case this iteration removes the current one next = handler.next;