前言¶
DeepSeek Harness (DSH) 的 Web 聊天会话在运行时间变长后,会话记录(transcript)的 DOM 节点数量迅速增加。由于上游实现并未对聊天记录进行虚拟化,每一个加载的历史页面都会保留在 DOM 中。在长会话中,拖动宽度调整手柄、侧边栏分隔线,或者快速滚动时,浏览器需要对数千个节点执行布局和绘制操作,导致界面卡顿。
定位与原理¶
dsh-chat-offscreen 是一个客户端插件,旨在解决上述性能问题。它通过注入一个样式表,利用 CSS 的 content-visibility 属性,让浏览器跳过不可见区域内的辅助步骤和工具调用行的布局与绘制。这相当于一种开销极低的虚拟化近似方案,同时通过 contain-intrinsic-size 保持滚动范围的稳定。对于包含宽 markdown 表格的行,插件会强制其保持可见,以避免宽度估算错误。
核心功能¶
- 跳过不可见区域的布局和绘制。
- 提供开销较低的虚拟化近似效果。
- 保持滚动范围稳定。
安装与启用¶
使用官方安装命令添加插件:
dsh plugin --profile web add github:publieople/dsh-chat-offscreen
安装后,重启 Web 模式 (dsh web ...) 并在浏览器中硬刷新页面(Ctrl+Shift+R)。由于 lib/ 目录已包含构建产物,无需运行构建脚本。
典型用法¶
- 打开一个包含较长历史的会话。
- 拖动聊天记录宽度手柄或侧边栏分隔线,或者快速滚动页面。
- 在浏览器开发者工具的 Elements 面板中检查不可见的辅助步骤元素,应能看到
content-visibility: auto属性。
注意事项与兼容性¶
- 渲染层修复:这是一个渲染层层面的变通方案,不涉及消息、会话事件或宿主状态的修改。
- 组合使用:可与已退役的
@linxin666/dsh-perfP0 规则配合使用。 - 浏览器依赖:该功能依赖浏览器的
content-visibility特性(Chrome/Edge 85+, Firefox 125+, Safari 18+)。在旧版引擎上,规则将处于非激活状态,UI 表现与安装前一致。 - 风险提示:插件以当前 dsh 进程的权限运行,安装前请检查源码与许可证(MIT)。
结语¶
该插件通过 CSS 技术在渲染层缓解了长会话的性能压力。当 DSH 聊天界面获得真正的虚拟化支持时,此插件即可移除。更多细节与源码可参考下方链接。