perf: use structuredClone for message deep copies (#21948)

This commit is contained in:
Algorithm5838
2026-02-28 22:09:29 +03:00
committed by GitHub
parent 9440d09114
commit 54cefedf53
2 changed files with 5 additions and 5 deletions

View File

@@ -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]);
}
}

View File

@@ -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);
}
}
}