dsh-large-proj-perf 1.16.0 → 1.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/README.md +18 -7
- package/docs/PUBLISHING.md +7 -4
- package/docs/VERSIONING.md +74 -0
- package/locale/en.json +1 -1
- package/locale/zh.json +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
> [docs/RENDER-ANALYSIS.md](docs/RENDER-ANALYSIS.md)。下文提到的
|
|
13
13
|
> `RUNTIME-ANALYSIS.md` / `MEMORY-ANALYSIS.md` 已于 1.10.0 并入 MEASUREMENTS,
|
|
14
14
|
> 路径只作文物引用。
|
|
15
|
+
>
|
|
16
|
+
> **版本号规则见 [docs/VERSIONING.md](docs/VERSIONING.md)**:版本在发布时决定,
|
|
17
|
+
> 开发中的变更先记在 `[Unreleased]`,不逐次改 `package.json`。
|
|
15
18
|
|
|
16
19
|
## 重要版本速览
|
|
17
20
|
|
|
@@ -40,6 +43,27 @@
|
|
|
40
43
|
|
|
41
44
|
## [Unreleased]
|
|
42
45
|
|
|
46
|
+
<a id="v1-16-1"></a>
|
|
47
|
+
## [1.16.1] — 2026-11-14
|
|
48
|
+
|
|
49
|
+
文档与元数据修补:补上渲染优化的能力/效果描述,并把版本号策略写进文档。
|
|
50
|
+
**行为零变化。**
|
|
51
|
+
|
|
52
|
+
### 文档
|
|
53
|
+
|
|
54
|
+
- 新增 [docs/VERSIONING.md](docs/VERSIONING.md):**版本号只在发布时决定**;记录
|
|
55
|
+
npm 序列 `1.4.0 → 1.10.1 → 1.16.0` 的跳跃原因;`engines.dsh` 收紧一律算 MAJOR。
|
|
56
|
+
- `docs/PUBLISHING.md`、README、本文件指向该策略;`tests/verify_docs.mjs` 增加
|
|
57
|
+
`package.json` ↔ CHANGELOG 首条版本的一致性断言。
|
|
58
|
+
|
|
59
|
+
### 元数据
|
|
60
|
+
|
|
61
|
+
- `package.json` 的 `description` 与 `locale/{zh,en}.json` 补上浏览器侧离屏行
|
|
62
|
+
containment 的效果(批量翻页阻塞约 −47%)与渲染耗时诊断。
|
|
63
|
+
- README 的「最近重要更新」补 1.12.0 的渲染里程碑与 1.16.0;「能力与效果」表补
|
|
64
|
+
containment 的最长任务指标,并明确 `clientContainment` 是唯一有实测收益的
|
|
65
|
+
渲染优化、`renderTiming` 只采集数据。
|
|
66
|
+
|
|
43
67
|
<a id="v1-16-0"></a>
|
|
44
68
|
## [1.16.0] — 2026-11-13 — ⚠️ 重要(文档归一 + 结构债)
|
|
45
69
|
|
package/README.md
CHANGED
|
@@ -6,15 +6,17 @@
|
|
|
6
6
|
[]()
|
|
7
7
|
[](LICENSE)
|
|
8
8
|
|
|
9
|
-
> **⚠️
|
|
9
|
+
> **⚠️ 最近发生重要更新**
|
|
10
10
|
>
|
|
11
|
-
> - **1.10.0
|
|
12
|
-
>
|
|
11
|
+
> - **1.10.0(破坏性)**移除三项在 dsh 0.2.2 上恒不生效的能力,配置键从 22 个减到
|
|
12
|
+
> 17 个(`warmupEnabled` / `warmOnCreated` / `fastInitFor` / `preparedCacheTrim` /
|
|
13
13
|
> `preparedCacheSize` 已删除),并修掉「改配置不生效」的晚绑定 bug。
|
|
14
14
|
> - 支持范围收紧为 **dsh >= 0.2.2-rc.1 且 < 0.3.0**。更旧的 dsh 上会被加载门禁
|
|
15
15
|
> 跳过(日志 `skipping profile bundle`)。
|
|
16
|
-
> -
|
|
17
|
-
>
|
|
16
|
+
> - 性能里程碑:**1.8.0** 冷读 21.2 s → 3.0 s;**1.9.0** 稳态 RSS 1324 → 690 MB;
|
|
17
|
+
> **1.12.0** 浏览器侧离屏行 containment,批量翻页阻塞 2 836 → 1 489 ms(约 −47%),
|
|
18
|
+
> 首次实测渲染链路。
|
|
19
|
+
> - **1.16.0** 收敛测量文档并修诊断设施的结构债,无用户可见能力变化。
|
|
18
20
|
>
|
|
19
21
|
> 从 1.4.0 或更早升级的用户,升级前请先读
|
|
20
22
|
> [CHANGELOG 的重要版本速览](CHANGELOG.md#重要版本速览)。
|
|
@@ -37,15 +39,19 @@ DeepSeek Harness(dsh)**大会话**性能插件。针对数十万事件的长
|
|
|
37
39
|
|---|---|---|---|
|
|
38
40
|
| **turnOutline 折叠加速** | 该投影单元每次 turn 整数组复制(O(n²)),占冷读 76% | 冷读 **21.2 s → 3.0 s** | 开 |
|
|
39
41
|
| **事件缓存字节预算** | dsh 的缓存只按「会话条数」限容;6 个 18 MB 会话涨到 1.2 GB | 稳态 RSS **1324 → 690 MB** | 开(512 MiB) |
|
|
40
|
-
| **离屏行 containment** | 聊天列表没有虚拟滚动,已加载的每一行都参与布局 | 批量翻页阻塞 **
|
|
42
|
+
| **离屏行 containment** | 聊天列表没有虚拟滚动,已加载的每一行都参与布局 | 批量翻页阻塞 **2 836 → 1 489 ms**(约 −47%),最长任务 416 → 244 ms;未测到滚动漂移 | 开 |
|
|
41
43
|
| 分片 materialize | 落盘时把整个会话序列化成一个巨大字符串 | 2 帧 → 6 帧,消除 `RangeError` | 开 |
|
|
42
44
|
| 零拷贝 fork | fork 时逐事件深拷贝整个会话 | 直测 -16% ~ -21%(**但 UI 不走这条路**,见下) | 开 |
|
|
43
|
-
| 渲染耗时诊断 | 打开会话慢在哪一段无从得知 |
|
|
45
|
+
| 渲染耗时诊断 | 打开会话慢在哪一段无从得知 | 五段归因(请求/服务端/响应/派发/挂载)、`ws.send` 拆写队列与 deflate、LoAF 脚本归属、跳转与滚动窗口 | 关 |
|
|
44
46
|
| 历史窗口预算 | 一页只按消息条数切,无字节上限 | 长会话 70 KB/页、重会话 1.7 MB/页;默认不动,按需收紧 | 关 |
|
|
45
47
|
| 冷读回写 | 冷读后把投影状态写成缓存行 | **无耗时收益**,只让列表读看到新数据 | 关 |
|
|
46
48
|
| 冷会话补行 | 磁盘上的大会话没有投影缓存行 | 启动 15 s 后批量补写 | 关 |
|
|
47
49
|
| heap 上限告警 | V8 heap 上限过低时无任何提示 | 启动时检查并告警 | — |
|
|
48
50
|
|
|
51
|
+
> 浏览器侧唯一有实测收益的**优化**是 `clientContainment`;`renderTiming` 只采集
|
|
52
|
+
> 数据,不改变渲染行为。两者的测量条件与边界见
|
|
53
|
+
> [docs/RENDER-ANALYSIS.md](docs/RENDER-ANALYSIS.md) §7/§9。
|
|
54
|
+
|
|
49
55
|
### 两条必须知道的限制
|
|
50
56
|
|
|
51
57
|
**① `stats.patches` 显示 `active` 不等于在真实链路上被调用。**
|
|
@@ -275,6 +281,11 @@ npm test
|
|
|
275
281
|
`e2e_real_components` 用真实实现类(原型链驱动)验证补丁装上后的行为;其余套件
|
|
276
282
|
覆盖逻辑与边界。
|
|
277
283
|
|
|
284
|
+
**版本号只在发布时决定**:开发轮次的变更先记入 `CHANGELOG.md` 的 `[Unreleased]`,
|
|
285
|
+
不逐次改 `package.json`。选号规则与发布清单见
|
|
286
|
+
[`docs/VERSIONING.md`](docs/VERSIONING.md);`tests/verify_docs.mjs` 会断言
|
|
287
|
+
`package.json` 与 CHANGELOG 首条版本一致。
|
|
288
|
+
|
|
278
289
|
这三层都**不验证真实 dsh 进程里的调用链**。那需要起一个隔离实例并驱动 HTTP RPC,
|
|
279
290
|
工具在 [`tools/runtime-probe/`](tools/runtime-probe/README.md):
|
|
280
291
|
|
package/docs/PUBLISHING.md
CHANGED
|
@@ -98,12 +98,15 @@ git push origin v<version>
|
|
|
98
98
|
|
|
99
99
|
## 版本号策略
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
-
|
|
101
|
+
选号规则、开发中的 `[Unreleased]` 约定、预发布号与发错处理见
|
|
102
|
+
[VERSIONING.md](VERSIONING.md)。发布相关的两条硬约束:
|
|
103
|
+
|
|
104
|
+
- **版本号只在发布时决定**:开发轮次不逐次改 `package.json`,变更先记在
|
|
105
|
+
`CHANGELOG.md` 的 `[Unreleased]`;发布时再按变更性质选 MAJOR / MINOR / PATCH。
|
|
106
|
+
- **`engines.dsh` 收紧算 MAJOR**:即使用户代码零改动,旧 dsh 会被加载门禁拒绝。
|
|
105
107
|
|
|
106
108
|
升级 dsh 大版本(如 0.3)时,**必须同步更新 `engines.dsh` 的上界**,否则 dsh 会因
|
|
107
109
|
门禁跳过本插件(见 `docs/COMPATIBILITY.md`「两个版本的区分」)。
|
|
108
110
|
|
|
109
111
|
**版本号以 `package.json` 为唯一来源。** 文档中不写死版本号,避免漂移。
|
|
112
|
+
`CHANGELOG.md` 的第一个版本条目必须与它相等——`tests/verify_docs.mjs` 会断言。
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# 版本号与发布节奏
|
|
2
|
+
|
|
3
|
+
> 本文是版本号规则的唯一来源。当前版本值只看 `package.json` 的 `version`;
|
|
4
|
+
> 本文不写死版本号,避免漂移。
|
|
5
|
+
|
|
6
|
+
## 1. 一句话
|
|
7
|
+
|
|
8
|
+
**版本号在发布时决定,不在每轮开发结束时决定。** 开发中的变更先累积在
|
|
9
|
+
[CHANGELOG.md](../CHANGELOG.md) 的 `[Unreleased]` 下;决定发布时,才按变更性质
|
|
10
|
+
选 MAJOR / MINOR / PATCH。
|
|
11
|
+
|
|
12
|
+
## 2. 为什么改
|
|
13
|
+
|
|
14
|
+
npm 上可见的版本序列是 `1.4.0 → 1.10.1 → 1.16.0`,看起来像跳号。实际原因是:
|
|
15
|
+
|
|
16
|
+
| npm 可见 | 本地 CHANGELOG | 说明 |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| 1.4.0 | 1.4.0 | 旧习惯发布 |
|
|
19
|
+
| — | 1.5–1.9 | 开发轮次,版本号每轮 +1,但从未 publish |
|
|
20
|
+
| 1.10.1 | 1.10.1 | 最后一次按旧习惯发布 |
|
|
21
|
+
| — | 1.11–1.15 | 开发轮次,未 publish |
|
|
22
|
+
| 1.16.0 | 1.16.0 | 当前发布;含 1.11–1.16 全部变更 |
|
|
23
|
+
|
|
24
|
+
内容没有丢,但版本号失去了发布语义,而且把破坏性变更(1.11.0 收紧
|
|
25
|
+
`engines.dsh`)埋进了 minor。从 1.16.0 起执行本文规则;**已发布的 1.16.0 不回滚、
|
|
26
|
+
不重发**。
|
|
27
|
+
|
|
28
|
+
## 3. 选号规则
|
|
29
|
+
|
|
30
|
+
| 变更性质 | 号 | 例子 |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| **破坏性**:`engines.dsh` 收紧到不兼容、移除配置键或能力、改变默认行为、导出变更 | **MAJOR** | 1.11.0 把 engines 从 `>=0.1.0-rc.6` 收紧到 `>=0.2.2-rc.1`,按本规则应为 2.0.0 |
|
|
33
|
+
| **新增能力**:新配置键(默认关)、新诊断字段、可观察的行为改进 | **MINOR** | 新增 `renderTiming` / `stats.render.sends` |
|
|
34
|
+
| **修复与杂项**:bug 修复、文档、元数据、只扩展支持的 dsh 版本且不改行为 | **PATCH** | 1.10.1 |
|
|
35
|
+
|
|
36
|
+
判定顺序:先看有没有破坏性,再看有没有新增能力,最后才是 patch。
|
|
37
|
+
|
|
38
|
+
**`engines.dsh` 的收紧一律算 MAJOR**,即使代码零改动——用户升级后插件会被加载
|
|
39
|
+
门禁拒绝,这是实实在在的破坏。
|
|
40
|
+
|
|
41
|
+
## 4. 开发中的版本
|
|
42
|
+
|
|
43
|
+
- 不逐轮改 `package.json`。内部轮次的变更全部写在 `## [Unreleased]`。
|
|
44
|
+
- 需要发布测试版时用预发布号:`X.Y.Z-dev.N` / `X.Y.Z-rc.N`,并显式
|
|
45
|
+
`npm publish --tag next`;`latest` 只指向稳定版。
|
|
46
|
+
- 一个版本号只能发布一次。发布前先确认不存在:
|
|
47
|
+
`npm view dsh-large-proj-perf@<version> version`。
|
|
48
|
+
|
|
49
|
+
## 5. 发布清单
|
|
50
|
+
|
|
51
|
+
1. `npm test` 全绿(`prepublishOnly` 会再跑一次)。
|
|
52
|
+
2. 把 `[Unreleased]` 改成 `## [X.Y.Z] — YYYY-MM-DD`,按 §3 选号。
|
|
53
|
+
3. `package.json` 的 `version` 改成同一个值。
|
|
54
|
+
4. `npm pack --dry-run` 核对文件清单。
|
|
55
|
+
5. 提交 `release: X.Y.Z`,打 `vX.Y.Z` tag。
|
|
56
|
+
6. `npm publish --registry https://registry.npmjs.org`。
|
|
57
|
+
7. `npm view dsh-large-proj-perf version dist-tags.latest` 确认指向新版本。
|
|
58
|
+
8. push commit 与 tag。
|
|
59
|
+
|
|
60
|
+
具体命令与 registry 注意事项见 [PUBLISHING.md](PUBLISHING.md)。
|
|
61
|
+
|
|
62
|
+
## 6. 发错了怎么办
|
|
63
|
+
|
|
64
|
+
- 优先**向前修**:发一个新的 PATCH / MINOR,而不是删版本。
|
|
65
|
+
- 只有发布 72 小时内、且属于安全 / 法律 / 不可修复的元数据错误时,才考虑
|
|
66
|
+
`npm unpublish`;它会让已安装的用户看到版本消失。
|
|
67
|
+
- 已 push 的 tag 不删改;补一个新版本,tag 跟着新版本走。
|
|
68
|
+
|
|
69
|
+
## 7. 与文档的关系
|
|
70
|
+
|
|
71
|
+
- `package.json` 的 `version` 是当前值;`CHANGELOG.md` 的第一个版本条目必须与它
|
|
72
|
+
相等。这条由 `tests/verify_docs.mjs` 断言。
|
|
73
|
+
- 文档正文不写死当前版本号;需要指代版本时用「当前发布」或相对描述。
|
|
74
|
+
- 历史条目保留发布当时的版本号与数字,不随新版本回改。
|
package/locale/en.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
3
|
"title": "Large Session Performance",
|
|
4
|
-
"description": "Cuts the load latency and memory footprint of very large sessions: turnOutline folding goes from O(n²) to O(n) (cold read 21.2s → 3.0s), event caches are capped by bytes instead of entry count (steady-state RSS 1324 → 690 MB), chunked materialize removes the RangeError on huge persistence writes, plus zero-copy fork and a V8 heap-limit warning."
|
|
4
|
+
"description": "Cuts the load latency and memory footprint of very large sessions: turnOutline folding goes from O(n²) to O(n) (cold read 21.2s → 3.0s), event caches are capped by bytes instead of entry count (steady-state RSS 1324 → 690 MB), offscreen-row containment in the browser cuts batch-paging blocking by about 47%, chunked materialize removes the RangeError on huge persistence writes, plus zero-copy fork, render-timing diagnostics and a V8 heap-limit warning."
|
|
5
5
|
}
|
|
6
6
|
}
|
package/locale/zh.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
3
|
"title": "大会话性能优化",
|
|
4
|
-
"description": "降低数十万事件长会话的打开延迟与内存占用:turnOutline 折叠从 O(n²) 改 O(n)(冷读 21.2s → 3.0s)、事件缓存按字节限容(稳态 RSS 1324 → 690 MB
|
|
4
|
+
"description": "降低数十万事件长会话的打开延迟与内存占用:turnOutline 折叠从 O(n²) 改 O(n)(冷读 21.2s → 3.0s)、事件缓存按字节限容(稳态 RSS 1324 → 690 MB)、浏览器侧离屏行 containment(批量翻页阻塞约 −47%)、分片 materialize 消除超大会话落盘的 RangeError、零拷贝 fork,以及渲染耗时诊断与 V8 heap 上限告警。"
|
|
5
5
|
}
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-large-proj-perf",
|
|
3
|
-
"version": "1.16.
|
|
4
|
-
"description": "DSH 大会话性能插件:turnOutline 折叠加速(冷读 21.2s → 3.0s)+ 事件缓存字节预算(RSS 1324 → 690 MB)+ 分片 materialize + 零拷贝 fork +
|
|
3
|
+
"version": "1.16.1",
|
|
4
|
+
"description": "DSH 大会话性能插件:turnOutline 折叠加速(冷读 21.2s → 3.0s)+ 事件缓存字节预算(RSS 1324 → 690 MB)+ 离屏行 containment(批量翻页阻塞约 −47%)+ 分片 materialize + 零拷贝 fork + 渲染耗时诊断",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"icon": "./icon.svg",
|