v0.1.2 — 智能加载更早历史(自适应性能闸门)
修复
解决长会话卡顿:原 autoLoad 只要还有「加载更早」就每 1.2 秒点一次、最多 60 次,把全部历史灌入 DOM。而 DSH 会话列表是非虚拟化渲染,DOM 越大整个页面越卡——形成「加载 → DOM 变大 → 更卡 → 继续加载」的正反馈。
改动
将 eager auto-load 改为 session 级自适应历史加载控制器:
- scan 与 autoLoad 解耦:scan 只负责折叠/分隔线/导航,加载逻辑独立成 governor
- 空闲单页加载:
requestIdleCallback(Safari 用setTimeout兜底),主线程空闲才加载下一批 - 性能闸门:每加载一页测一次
applySurgery耗时,软预算(连续 3 次超 30ms)或硬预算(单次 50ms)即自动暂停;Long Task API(Chromium/Firefox)作为增强刹车 - 预算用时间、非行数/次数:阈值是「UI 延迟预算」,跨机器性能自洽,快机器多加载、慢机器提前停
- 会话隔离:
Map<sessionId> + generation,防切换会话后陈旧 callback 串台;暂停状态按会话各自保存 - 暂停不自动恢复:保留宿主「加载更早」手动按钮,并在按钮旁轻提示一次
- 观察范围收窄:MutationObserver 从
document.body收到[data-conversation-scroll] - 顺手消除
applyFold相同 textContent 的冗余 DOM mutation
不新增任何用户设置,开关文案改为「智能加载更早历史」。
行为变化
| 场景 | 之前 | 现在 |
|---|---|---|
| 短会话 | 自动加载完 | 一样,自动加载完 |
| 长会话 | 一路加载到卡死 | 机器吃力前自动暂停,页面保持流畅 |
| 想继续看 | — | 手动点「加载更早」 |
后续
- 0.1.3:增量扫描(addedNodes → 只处理新增 Turn),进一步降低大 DOM 下的全量扫描成本
- 长期:导航索引脱离当前 DOM window,点击历史位置时按需加载