From 7836b1d956e0d0f658d8ef13dab1fe5c49c4a4cb Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Thu, 9 Apr 2026 13:48:18 -0400 Subject: [PATCH] =?UTF-8?q?perf(collab):=20lazy=20GC=20timer=20=E2=80=94?= =?UTF-8?q?=20start=20on=20first=20peer,=20stop=20when=20empty?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The collab overlay was running a 5s setInterval GC timer on every page load even with zero peers. Now the timer starts only when the first peer arrives and stops when all peers are garbage collected. Co-Authored-By: Claude Opus 4.6 --- shared/components/rstack-collab-overlay.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/shared/components/rstack-collab-overlay.ts b/shared/components/rstack-collab-overlay.ts index 3826a696..03115141 100644 --- a/shared/components/rstack-collab-overlay.ts +++ b/shared/components/rstack-collab-overlay.ts @@ -136,6 +136,7 @@ export class RStackCollabOverlay extends HTMLElement { selection: existing?.selection ?? null, lastSeen: Date.now(), }); + this.#ensureGcTimer(); this.#renderBadge(); if (this.#panelOpen) this.#renderPanel(); } @@ -240,6 +241,7 @@ export class RStackCollabOverlay extends HTMLElement { module: msg.module || existing?.module, context: msg.context || existing?.context, }); + this.#ensureGcTimer(); this.#renderBadge(); if (this.#panelOpen) this.#renderPanel(); }); @@ -368,6 +370,7 @@ export class RStackCollabOverlay extends HTMLElement { lastSeen: Date.now(), }; this.#peers.set(msg.peer, peer); + this.#ensureGcTimer(); this.#renderBadge(); if (!this.#badgeOnly) { this.#renderCursors();