Skip to content

Commit 7c1387d

Browse files
committed
perf: cache marked.lexer output for detail tokens
1 parent da5ba5d commit 7c1387d

1 file changed

Lines changed: 20 additions & 2 deletions

File tree

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

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,21 @@
1+
<script context="module" lang="ts">
2+
import { marked, type Token } from 'marked';
3+
import { decode } from 'html-entities';
4+
5+
const _detailTokensCache = new Map<string, Token[]>();
6+
const DETAIL_CACHE_MAX = 500;
7+
8+
function getCachedDetailTokens(text: string): Token[] {
9+
if (_detailTokensCache.has(text)) return _detailTokensCache.get(text)!;
10+
const tokens = marked.lexer(decode(text));
11+
if (_detailTokensCache.size >= DETAIL_CACHE_MAX) {
12+
_detailTokensCache.delete(_detailTokensCache.keys().next().value!);
13+
}
14+
_detailTokensCache.set(text, tokens);
15+
return tokens;
16+
}
17+
</script>
18+
119
<script lang="ts">
220
import { decode } from 'html-entities';
321
import { onMount, getContext } from 'svelte';
@@ -398,7 +416,7 @@
398416
<div class="mb-1.5" slot="content">
399417
<svelte:self
400418
id={`${id}-${tokenIdx}-${detailIdx}-d`}
401-
tokens={marked.lexer(decode(detailToken.text))}
419+
tokens={getCachedDetailTokens(detailToken.text)}
402420
attributes={detailToken?.attributes}
403421
{done}
404422
{editCodeBlock}
@@ -445,7 +463,7 @@
445463
<div class=" mb-1.5" slot="content">
446464
<svelte:self
447465
id={`${id}-${tokenIdx}-d`}
448-
tokens={marked.lexer(decode(token.text))}
466+
tokens={getCachedDetailTokens(token.text)}
449467
attributes={token?.attributes}
450468
{done}
451469
{editCodeBlock}

0 commit comments

Comments
 (0)