Skip to content

Commit 7eaace2

Browse files
Algorithm5838github-actions[bot]
authored andcommitted
perf: cache marked.lexer output for detail tokens
1 parent 73773d4 commit 7eaace2

1 file changed

Lines changed: 21 additions & 4 deletions

File tree

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

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,29 @@
1-
<script lang="ts">
1+
<script context="module" lang="ts">
2+
import { marked, type Token } from 'marked';
23
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, done: boolean = true): Token[] {
9+
if (!done) return marked.lexer(decode(text));
10+
if (_detailTokensCache.has(text)) return _detailTokensCache.get(text)!;
11+
const tokens = marked.lexer(decode(text));
12+
if (_detailTokensCache.size >= DETAIL_CACHE_MAX) {
13+
_detailTokensCache.delete(_detailTokensCache.keys().next().value!);
14+
}
15+
_detailTokensCache.set(text, tokens);
16+
return tokens;
17+
}
18+
</script>
19+
20+
<script lang="ts">
321
import { onMount, getContext } from 'svelte';
422
const i18n = getContext('i18n');
523
624
import fileSaver from 'file-saver';
725
const { saveAs } = fileSaver;
826
9-
import { marked, type Token } from 'marked';
1027
import { copyToClipboard, unescapeHtml } from '$lib/utils';
1128
1229
import { WEBUI_BASE_URL } from '$lib/constants';
@@ -398,7 +415,7 @@
398415
<div class="mb-1.5" slot="content">
399416
<svelte:self
400417
id={`${id}-${tokenIdx}-${detailIdx}-d`}
401-
tokens={marked.lexer(decode(detailToken.text))}
418+
tokens={getCachedDetailTokens(detailToken.text, done)}
402419
attributes={detailToken?.attributes}
403420
{done}
404421
{editCodeBlock}
@@ -445,7 +462,7 @@
445462
<div class=" mb-1.5" slot="content">
446463
<svelte:self
447464
id={`${id}-${tokenIdx}-d`}
448-
tokens={marked.lexer(decode(token.text))}
465+
tokens={getCachedDetailTokens(token.text, done)}
449466
attributes={token?.attributes}
450467
{done}
451468
{editCodeBlock}

0 commit comments

Comments
 (0)