Skip to content

Commit 1883736

Browse files
committed
perf: memoize marked.lexer for details blocks
1 parent 3253be7 commit 1883736

1 file changed

Lines changed: 18 additions & 3 deletions

File tree

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

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
1+
<script lang="ts" context="module">
2+
import { marked, type Token } from 'marked';
3+
import { decode } from 'html-entities';
4+
5+
const _detailsLexCache = new Map<string, Token[]>();
6+
const cachedLex = (text: string): Token[] => {
7+
const cached = _detailsLexCache.get(text);
8+
if (cached) return cached;
9+
const result = marked.lexer(decode(text));
10+
if (_detailsLexCache.size > 50) _detailsLexCache.clear();
11+
_detailsLexCache.set(text, result);
12+
return result;
13+
};
14+
</script>
15+
116
<script lang="ts">
217
import { decode } from 'html-entities';
318
import { onMount, getContext } from 'svelte';
@@ -6,7 +21,7 @@
621
import fileSaver from 'file-saver';
722
const { saveAs } = fileSaver;
823
9-
import { marked, type Token } from 'marked';
24+
import { type Token } from 'marked';
1025
import { copyToClipboard, unescapeHtml } from '$lib/utils';
1126
1227
import { WEBUI_BASE_URL } from '$lib/constants';
@@ -393,7 +408,7 @@
393408
<div class="mb-1.5" slot="content">
394409
<svelte:self
395410
id={`${id}-${tokenIdx}-${detailIdx}-d`}
396-
tokens={marked.lexer(decode(detailToken.text))}
411+
tokens={cachedLex(detailToken.text)}
397412
attributes={detailToken?.attributes}
398413
{done}
399414
{editCodeBlock}
@@ -440,7 +455,7 @@
440455
<div class=" mb-1.5" slot="content">
441456
<svelte:self
442457
id={`${id}-${tokenIdx}-d`}
443-
tokens={marked.lexer(decode(token.text))}
458+
tokens={cachedLex(token.text)}
444459
attributes={token?.attributes}
445460
{done}
446461
{editCodeBlock}

0 commit comments

Comments
 (0)