Skip to content

Commit 9992580

Browse files
committed
fix: throttle markdown lexer during streaming to prevent rendering backlog
- Add leading-edge throttle (150ms) on marked.lexer() during streaming - Reduces lexer calls from 60/sec to ~7/sec, preventing CPU backlog on mobile - When done=true, throttle is bypassed for immediate final render - Loaded/finished chats render identically to upstream
1 parent 9c69b02 commit 9992580

1 file changed

Lines changed: 7 additions & 3 deletions

File tree

src/lib/components/chat/Messages/Markdown.svelte

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
export let onTaskClick = () => {};
3535
3636
let tokens = [];
37+
let lexThrottle = null;
3738
3839
const options = {
3940
throwOnError: false,
@@ -53,13 +54,16 @@
5354
]
5455
});
5556
56-
$: (async () => {
57-
if (content) {
57+
// Throttle lexer during streaming to prevent rendering backlog
58+
$: if (content) {
59+
if (done || !lexThrottle) {
60+
clearTimeout(lexThrottle);
5861
tokens = marked.lexer(
5962
replaceTokens(processResponseContent(content), model?.name, $user?.name)
6063
);
64+
lexThrottle = done ? null : setTimeout(() => { lexThrottle = null; }, 150);
6165
}
62-
})();
66+
}
6367
</script>
6468
6569
{#key id}

0 commit comments

Comments
 (0)