lazy-load chat messages from the end instead of rendering all from start
- Linguagem predominante
- Rust
- Estrelas
- 54.2k
- Forks
- 6.2k
- Merge médio
- 3d 2h
- PRs com merge (30d)
- 262
Descrição
**What problem would this solve?**
When opening a long chat session, all messages are rendered from first to last,
then the app auto-scrolls to the bottom. On long sessions this causes sluggish
initial load and scrolling from excessive DOM nodes, and in extreme cases the
renderer can freeze (see #11557).
This affects users who keep long-running sessions with dozens or hundreds of
messages — a common pattern when working on complex tasks.
**What would a good outcome look like?**
On session open, only the last N messages are rendered (newest first). Older
messages are loaded on scroll-to-top or via a "Load older" button. The load
is smooth, scroll position is preserved when prepending, and short sessions
(≤ N messages) are unaffected — all messages show as before.
**Possible approaches**
- Show only the last ~50 messages initially
- IntersectionObserver on a top sentinel detects scroll-to-top and loads 30 more
- "Load older" and "Load all" buttons for manual control
- Cmd/Ctrl+F triggers full message load for search
- New streaming messages append naturally to the visible window
**Additional context**
There was an attempted fix in PR #11578 that was closed because it lacked a
tracking issue. The implementation only modified
`ui/desktop/src/components/ProgressiveMessageList.tsx` and did not touch
`BaseChat.tsx` or `chatSessionStore`.
Related issue: #11557 describes a renderer hang in long sessions; lazy-loading
old messages is one of the mitigations suggested there.
Guia de contribuição
Avaliação
Esta issue ainda não foi avaliada.