From 92ac6ed44f90023438ebeb9c3771469aa7c8c448 Mon Sep 17 00:00:00 2001 From: Raz Luvaton <16746759+rluvaton@users.noreply.github.com> Date: Thu, 4 Apr 2024 12:54:28 +0100 Subject: [PATCH] events: improve `addAbortListener` perf by caching options object --- lib/internal/events/abort_listener.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/internal/events/abort_listener.js b/lib/internal/events/abort_listener.js index 033cbf7b250fe0..3f91cec5faca9a 100644 --- a/lib/internal/events/abort_listener.js +++ b/lib/internal/events/abort_listener.js @@ -1,6 +1,7 @@ 'use strict'; const { + ObjectFreeze, SymbolDispose, } = primordials; const { @@ -15,6 +16,7 @@ const { let queueMicrotask; let kResistStopPropagation; +let abortListenerOptions; /** * @param {AbortSignal} signal @@ -34,8 +36,9 @@ function addAbortListener(signal, listener) { queueMicrotask(() => listener()); } else { kResistStopPropagation ??= require('internal/event_target').kResistStopPropagation; + abortListenerOptions ??= ObjectFreeze({ __proto__: null, once: true, [kResistStopPropagation]: true }); // TODO(atlowChemi) add { subscription: true } and return directly - signal.addEventListener('abort', listener, { __proto__: null, once: true, [kResistStopPropagation]: true }); + signal.addEventListener('abort', listener, abortListenerOptions); removeEventListener = () => { signal.removeEventListener('abort', listener); };