Sessions & Messages

dsh-perf-boost

AlLHHH/dsh-perf-boost · ★ 4

AlLHHH

DSH(DeepSeek Harness)桌面端性能优化插件:长对话省渲染、后台暂停定时器、会话列表节流、媒体懒加载、大会话预热等功能

README body is shown in Chinese.

License
MIT
Added
2026-10-30
Maintenance
active
Install kind
npm
npm
dsh-perf-boost
Manifest details
Manifest status
Declared
Manifest path
package.json#dsh
Manifest checked
2026-10-30T09:38:31.224Z
Lifecycle scripts
None found

Static manifest checks report declarations only; they are not compatibility or security review.

安装

dsh plugin --profile web add 'dsh-perf-boost@0.2.1'

从 npm 安装预构建包

For install and environment setup, plus plugin development tutorials, see DSH community docs ↗

README

Source README · body: zh · Read Chinese README

Table of contents
  1. 更新详情
  2. 0.2.2
  3. 0.2.1
  4. 0.2.0
  5. 开关
  6. 验证
  7. 实测
  8. 安装
  9. 实现说明
  10. 已知限制
  11. 兼容
  12. 许可

DeepSeek Harness 桌面端的客户端渲染优化插件,全部改动只发生在渲染进程。

Client-side rendering optimizations for DSH Desktop.

设置入口:设置 → 性能优化

更新详情

0.2.2

  • 优化了长对话省渲染的实现,改成一处分样式接管子项,新消息进来自动生效的效果
  • 修复了流式输出时每来一条消息就扫一遍页面的问题,改成一分钟几十次的空闲巡检的问题

0.2.1

  • 新增了「大会话预热」的开关,设置页里点一下就能关的功能
  • 新增了浅色模式下的配色,开关和分隔线跟着文字颜色走的效果
  • 优化了开关说明的文字,统一改成「可能会导致……」的效果
  • 新增了百分比改成最近 1 分钟窗口,长时间使用不会越用越低的功能
  • 优化了开关列表的顺序,默认开启的排在前面、默认关闭的放在后面的效果

0.2.0

  • 新增了设置页「更新详情」,能直接看到每个版本改了什么的功能
  • 新增了滚动时让路,滚动过程中不再扫列表、停手后再补的效果
  • 新增了长任务让路,超过 50 毫秒的卡顿之后等主线程缓过来再扫的效果
  • 新增了视口外图片低优先级解码,把带宽留给看得见的图的效果
  • 新增了窗口不可见时暂停 CSS 动画,合成器不再空转的效果
  • 修复了大会话预热会去读正在写入的会话文件的问题
  • 优化了列表观察范围,从盯整页收窄到只盯消息列表的效果
  • 优化了每个开关的说明,把可能会导致写清楚的效果

开关

按默认状态排序,前六项默认开启,对观感没有可见影响。

开关 默认 影响视觉 作用
长对话省渲染 开 无 给滚动列表容器挂一个 class,子项的 content-visibility: auto 由一条 CSS 规则接管(新消息自动生效,不用逐个打 inline style),占位高度取该列表实测平均子项高度;末尾 4 项与标了 aria-busy 的消息保持正常渲染,代码块单独按 300px 跳过
窗口隐藏不排帧 开 无 页面不可见时 schedule() 直接返回;切回时有 visibilitychange 钩子恢复,每秒看门狗兜底
空闲降帧 开 无 20 秒无输入将 rAF 驱动的动画降到 30fps,有输入立即恢复
媒体懒加载 开 无 图片加 loading=lazy、decoding=async,视频加 preload=metadata
后台暂停定时器 开 无 页面不可见时跳过 setInterval 回调,不销毁也不重置周期;回到前台各补跳一次
视口外暂停视频 开 无 仅处理静音视频:滚出视口暂停解码,滚回续播
会话列表节流 开 无 流式输出时把「只有 token 计数变了」的列表发布攒到每秒一次;可见字段变了立刻放行
大会话预热 开(宿主侧) 无 启动 15 秒后把最近 10 个 8MB 以上会话分段读进系统文件缓存,只读,跳过 10 分钟内改过的会话
关闭背景模糊 关 有 全局 backdrop-filter: none,浮层由磨砂改为纯色底
减少动画 关 有 动画与过渡时长置 0.001ms,弹窗不再逐帧动
帧率角标 关 有 右下角显示 NN fps

每个开关的说明里都标了可能会导致,这里汇总一次:

开关 可能会导致
长对话省渲染 快速滚动时,被跳过的行可能空白一瞬,紧接着补上
窗口隐藏不排帧 后台标签页里的动画会停,切回前台补一帧
空闲降帧 长时间不动,动画看起来变慢;动一下鼠标立刻恢复
媒体懒加载 快速拖到很远处的图片可能先白一下再出来
后台暂停定时器 隐藏期间攒下的轮询只补一次,个别插件会看到一次跳变
视口外暂停视频 滚回来时可能黑一下或重新缓冲
会话列表节流 侧栏 token 数字最多晚 1 秒才跳
大会话预热 读盘那几十秒里机械盘/低配机器打开会话可能反而慢一点,磁盘占用升高

不提供预设档位。

验证

  • 「长对话省渲染」行下方显示 已生效:N 个列表,跳过 M 项渲染(共 K 项)
  • 打开「帧率角标」,右下角出现 fps 小方块
  • 控制台 window.__dpbRaf、window.__dpbTimers 为 true,表示 rAF 与定时器接管成功

角标读数为浏览器实际送帧数,上限等于显示器刷新率。帧时、DOM 节点等细分数据请用 DevTools 的 Performance 面板录制,插件不做常驻采样。

实测

Windows 桌面端,200Hz 显示器,缩放 100%:

场景 帧率 p50 帧时(DevTools)
空白页(同机 Edge) 187–200 5.0 ms
DSH 页面(新会话,DOM 1218) 200 5.0 ms
DSH 桌面端(2.3 万事件会话) 约 156 ≈6.4 ms

页面代码本身可以跑满刷新率,差距来自长会话的 DOM 体量与 Electron 窗口合成。

安装

pnpm add dsh-perf-boost
pnpm add github:AlLHHH/dsh-perf-boost
pnpm add file:./dsh-perf-boost

将 dsh-perf-boost 加入 profile 的 dsh.profile.bundles,重启应用生效;卸载时从 bundles 移除并重启。

实现说明

  • 只修改当前渲染进程:不改宿主代码,不落盘配置,不发送遥测。配置存于 localStorage['dsh-perf-boost:cfg']。
  • 唯一的网络请求是「检查更新」:页面 POST 到 /api/dsh-perf-boost/update-check,由宿主查询 npm 的 latest(CSP 限制页面不能直接跨域)。查询失败显示「未查到」,不影响功能。
  • requestAnimationFrame 仅在启用「窗口隐藏不排帧」或「空闲降帧」时接管,否则保持原生实现。

大会话预热可以在设置页里关掉,也可以在插件配置里写 warmup: false 一次性关掉。

已知限制

  • 窗口的 transparent / vibrancy 由应用自身(app.asar 的 lib/main.js)决定,Windows 分支不透明,插件无法修改。
  • 省渲染只减少布局与绘制,消息节点仍在内存中,超长会话的滚动开销依然存在。
  • 媒体懒加载只修改属性,不改动 DOM 结构,已加载的图片不会被回收。

兼容

  • engines.dsh >= 0.2.0-0,实测 0.2.1-rc.3(桌面版 0.2.1.0)
  • peer @deepseek-ai/cordis ^4.0.1,实测 4.0.5
  • 依赖客户端插件 API:window.__ModuleLoader__.load、slots(settings.section)、require('react')

许可

MIT