Skip to content

v0.1.2 — 智能加载更早历史(自适应性能闸门)

Choose a tag to compare

@BananaSoldier01 BananaSoldier01 released this 19 Aug 13:31
· 46 commits to main since this release

修复

解决长会话卡顿:原 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,点击历史位置时按需加载