← 返回列表
未验证
跳过屏外消息的布局绘制,让超长会话滚动不卡顿
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/11 · 已提供中文文档
DSH Web 插件:通过跳过屏幕外对话记录行的布局/绘制(content-visibility),保持长聊天会话的响应性。
综合分
29.5
GitHub 分
29.5
用户评分
—
★ Stars
0
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add publieople/dsh-chat-offscreen该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
dsh-chat-offscreen
让超长上下文的 DeepSeek Harness (DSH) Web 会话保持流畅。
问题
DSH 的聊天转录上游没有做虚拟化:加载进来的历史分页会一直留在 DOM 里。
loadOlder() 一次拉 50 条消息,左侧轮次导航的跳转加载器则按 200 条/页一路
拉回到目标轮次,而且没有淘汰。长会话下,拖转录宽度手柄、拖侧栏分隔条,
甚至只是滚动,都会对成千上万个节点触发整树 layout + paint,界面因此卡顿。
这个插件做什么
它是一个极小的纯客户端插件,只注入一份样式表:
[data-chat-flow-kind="assistant-step"]:not(:has(.md-table-wide)),
[data-chat-flow-kind="tool-call"]:not(:has(.md-table-wide)) {
content-visibility: auto;
contain-intrinsic-size: auto 120px;
}
[data-chat-flow-kind="assistant-step"]:has(.md-table-wide),
[data-chat-flow-kind="tool-call"]:has(.md-table-wide) {
content-visibility: visible !important;
contain: none !important;
}
content-visibility: auto 让浏览器跳过屏外的「助手步骤」和「工具调用」行的
layout 与 paint——一种廉价的近似虚拟化;contain-intrinsic-size: auto 120px
在行还没渲染前保持滚动范围稳定,并在行首次渲染后记住其实测高度。含宽 markdown
表格的行会退出该规则,避免其突破宽度被错误估算。
这是渲染层兜底,不改数据:不触碰任何消息、会话事件或宿主状态。与已废弃的
@linxin666/dsh-perf 的同形态 P0 规则属于同源做法。
安装
dsh plugin --profile web add github:publieople/dsh-chat-offscreen
然后重启 web profile(dsh web ...)并硬刷新页面(Ctrl+Shift+R)。
lib/ 已提交进 Git,因此不会执行任何包构建脚本,也不需要 allowBuilds。
bundle patch 会自动插入插件行。若手动安装:
cd "$DSH_HOME/profiles/web"
pnpm add github:publieople/dsh-chat-offscreen
再在该 profile 的 package.json 里把 dsh-chat-offscreen 加进
dsh.profile.bundles,重启即可。
验证
打开一个长会话,拖转录宽度手柄 / 侧栏分隔条,或快速滚动。DevTools → Elements
里,一个屏外的助手步骤应当带上 content-visibility: auto。
禁用 / 卸载
dsh plugin --profile web remove dsh-chat-offscreen
然后重启。移除插件即移除样式表,不持久化任何状态。
兼容性
- 客户端平台:web。宿主半边是空的(仅为让插件出现在 Loader 中)。
- 只依赖浏览器 content-visibility(Chrome/Edge 85+、Firefox 125+、
Safari 18+)。旧引擎上规则不生效,界面维持原状。
- 针对 DSH 0.1.5-rc.1 构建;插件不 import 任何 DSH 运行时。
开发
npm install
npm run typecheck
npm run build # tsdown -> lib/index.js (ESM) + lib/client.js (ModuleLoader)
npm test # 用假 DOM 驱动已构建的 client bundle
lib/ 是刻意提交的,这样 Git 安装无需构建步骤。改动 src/ 后请重新
npm run build 并提交产物。
上游真做了虚拟化之后
等 DSH 聊天界面具备真正的虚拟化后,删掉这个插件行即可。上游轨迹视图
(ui-trajectory)已经虚拟化;聊天界面还没有。扫码进群