From f96d8e6b083e6666526507afdb4981db6b5e3267 Mon Sep 17 00:00:00 2001 From: Mark Tolmacs Date: Fri, 17 Apr 2026 14:16:29 +0000 Subject: [PATCH] fix: Collab event throttling Signed-off-by: Mark Tolmacs --- excalidraw-app/collab/Collab.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/excalidraw-app/collab/Collab.tsx b/excalidraw-app/collab/Collab.tsx index 622f92fb5e..d477dd8419 100644 --- a/excalidraw-app/collab/Collab.tsx +++ b/excalidraw-app/collab/Collab.tsx @@ -355,6 +355,8 @@ class Collab extends PureComponent { }; stopCollaboration = (keepRemoteState = true) => { + this.broadcastElements.flush(); + this.broadcastElements.cancel(); this.queueBroadcastAllElements.cancel(); this.queueSaveToFirebase.cancel(); this.loadImageFiles.cancel(); @@ -941,7 +943,9 @@ class Collab extends PureComponent { this.portal.broadcastIdleChange(userState); }; - broadcastElements = (elements: readonly OrderedExcalidrawElement[]) => { + private _broadcastElements = ( + elements: readonly OrderedExcalidrawElement[], + ) => { if ( getSceneVersion(elements) > this.getLastBroadcastedOrReceivedSceneVersion() @@ -952,6 +956,13 @@ class Collab extends PureComponent { } }; + broadcastElements = throttle( + (elements: readonly OrderedExcalidrawElement[]) => + this._broadcastElements(elements), + 10, + { leading: true, trailing: true }, + ); + syncElements = (elements: readonly OrderedExcalidrawElement[]) => { this.broadcastElements(elements); this.queueSaveToFirebase();