Commit 17d6bfc
committed
v0.8.10: frontend perf — batched rendering, DOM pruning, event delegation
Fixes 4 critical performance issues:
1. 🔴 innerHTML += → insertAdjacentHTML('beforeend', ...)
Avoids full element re-parsing on every token. Tokens are buffered
via requestAnimationFrame and rendered in batches — O(n²) -> O(n).
2. 🔴 No message cap → pruneMessages() at 100 DOM nodes
Keeps the message container bounded. After 100 messages+tool blocks,
oldest nodes are removed. Prevents unbounded memory growth.
3. 🔴 scrollBottom() per event → throttled via requestAnimationFrame
Coalesces multiple scroll calls into one layout pass per frame.
Eliminates forced-reflow chains from rapid token bursts.
4. 🔴 Per-item event listeners → event delegation
Tool-block collapse and session-item click use a single delegated
listener on the parent (#messages, #session-list, #completion).
Zero listener allocation during streaming or session reloads.
Plus:
- Debounced @ completion (150ms instead of 10ms timer per keystroke)
- contain: content on #messages to isolate layout scope
- textContent for tool results (no HTML parse needed)1 parent 81b1e88 commit 17d6bfc
1 file changed
Lines changed: 180 additions & 100 deletions
0 commit comments