Each subscribe adds another listener that closes over large data.
Closure and listener-related growthClosure count increasesArray and Object deltas growEventTarget → handler → payloadEach tick registers a new handler on the event bus. Handlers are never removed, and each one closes over a large payload array.
addEventListener is called every 500ms without a matching removeEventListener. Each handler retains its payload via closure.
// Fix: remove listeners, or use AbortController
const controller = new AbortController();
target.addEventListener('tick', handler, { signal: controller.signal });
// on cleanup: controller.abort();