From 54cefedf5378a9fcb3cf7fda62340442bd6d1504 Mon Sep 17 00:00:00 2001 From: Algorithm5838 <108630393+Algorithm5838@users.noreply.github.com> Date: Sat, 28 Feb 2026 22:09:29 +0300 Subject: [PATCH] perf: use structuredClone for message deep copies (#21948) --- .../components/chat/Messages/MultiResponseMessages.svelte | 4 ++-- src/lib/components/chat/Messages/ResponseMessage.svelte | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lib/components/chat/Messages/MultiResponseMessages.svelte b/src/lib/components/chat/Messages/MultiResponseMessages.svelte index 73460dff9f..1cace48bdd 100644 --- a/src/lib/components/chat/Messages/MultiResponseMessages.svelte +++ b/src/lib/components/chat/Messages/MultiResponseMessages.svelte @@ -60,10 +60,10 @@ let selectedModelIdx = null; - let message = JSON.parse(JSON.stringify(history.messages[messageId])); + let message = structuredClone(history.messages[messageId]); $: if (history.messages) { if (JSON.stringify(message) !== JSON.stringify(history.messages[messageId])) { - message = JSON.parse(JSON.stringify(history.messages[messageId])); + message = structuredClone(history.messages[messageId]); } } diff --git a/src/lib/components/chat/Messages/ResponseMessage.svelte b/src/lib/components/chat/Messages/ResponseMessage.svelte index 2d4dc740ec..ab3bc894dd 100644 --- a/src/lib/components/chat/Messages/ResponseMessage.svelte +++ b/src/lib/components/chat/Messages/ResponseMessage.svelte @@ -119,17 +119,17 @@ export let messageId; export let selectedModels = []; - let message: MessageType = JSON.parse(JSON.stringify(history.messages[messageId])); + let message: MessageType = structuredClone(history.messages[messageId]); $: if (history.messages) { const source = history.messages[messageId]; if (source) { // Fast path: O(1) check on the fields that change most often (content during streaming, done at end) // Avoids 2x O(n) JSON.stringify calls that are always true during streaming anyway if (message.content !== source.content || message.done !== source.done) { - message = JSON.parse(JSON.stringify(source)); + message = structuredClone(source); } else if (JSON.stringify(message) !== JSON.stringify(source)) { // Slow path: full comparison for infrequent changes (sources, annotations, status, etc.) - message = JSON.parse(JSON.stringify(source)); + message = structuredClone(source); } } }