> ## Documentation Index
> Fetch the complete documentation index at: https://openclaw.zhcndoc.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 发布性能扫描

本页汇总了 2026 年 5 月 OpenClaw 性能、包大小、依赖和 shrinkwrap 清理背后的证据。它是面向公开博客文章的技术配套说明。

这里合并了两类审计：

* **发布性能扫描：** 从 `v2026.5.28` 回溯到稳定版 `v2026.4.23` 的 GitHub Releases，使用 `OpenClaw Performance` 工作流、`profile=smoke`、mock-provider 线路。大多数标签行只有一个样本；`v2026.5.27` 和 `v2026.5.28` 行使用最新的重复 3 次发布分支产物。
* **更早的 4 月上下文：** 已发布的 `clawgrit-reports` mock-provider 基线，范围从 `v2026.4.1` 到 `v2026.5.2`，仅用于避免把 4 月下旬损坏的发布当作公开性能基线。
* **安装占用扫描：** 在临时包中执行全新的 `npm install --ignore-scripts`，使用 `du -sk node_modules` 统计大小，并通过遍历 `node_modules` 统计包实例数量。
* **npm 包大小扫描：** 对已发布版本执行 `npm pack openclaw@<version> --dry-run --json`，记录压缩后的 tarball 大小、解包后大小和文件数量。

<Warning>
  主性能扫描每个标签只使用一个 smoke 样本，`v2026.5.27` 和 `v2026.5.28` 行除外，它们使用最新的重复 3 次发布分支产物。更早的 4 月上下文使用了来自 `clawgrit-reports` 的已发布重复 3 次中位数。请将这些数字视为趋势证据和回归排查信号，而不是发布门槛统计。
</Warning>

## 快照

性能覆盖范围：**77 个请求的发布**、**74 个有产物支持的点**，以及 **3 次不可用的 CI 运行**。最新稳定测量点：`v2026.5.28`。

<CardGroup cols={2}>
  <Card title="稳定代理回合" icon="gauge">
    **冷启动快 5.1 倍**

    * `v2026.4.14`：9.8s
    * `v2026.5.28`：1.9s
  </Card>

  <Card title="已发布包" icon="package">
    **17.9MB tarball**

    最新稳定包，低于 3 月份 43.3MB 的包大小峰值。
  </Card>

  <Card title="最新稳定安装" icon="hard-drive">
    **361.7MiB 全新安装**

    将嵌套的 OpenClaw 依赖树从 `2026.5.22`
    shrinkwrap-introduction 峰值显著压缩，不过在本地安装审计中仍
    保留着一个更小的 259.7MiB 嵌套树。
  </Card>

  <Card title="依赖图" icon="boxes">
    **300 个已安装包**

    在禁用脚本的全新安装中，按唯一的包名/版本根节点计量；比之前的稳定版本少 71 个根节点。
  </Card>
</CardGroup>

## 5.28 中的变化

在 `v2026.5.27` 到 `v2026.5.28` 之间的清理，缩小了默认安装图，而不是移除这些能力本身。

<CardGroup cols={2}>
  <Card title="根默认图" icon="git-branch">
    唯一包名/版本根从 **371** 降到 **300**。包实例从 **372** 降到 **301**。
  </Card>

  <Card title="嵌套树" icon="unplug">
    在同一份本地安装审计中，嵌套的 `openclaw/node_modules` 从 **656.1MiB** 降到 **259.7MiB**。
  </Card>

  <Card title="原生可选锥体" icon="cpu">
    全平台的 `@napi-rs/canvas` 原生包锥体不再进入默认安装。
  </Card>

  <Card title="供应链面" icon="shield">
    更少的默认包意味着默认需要信任的 tarball、维护者、原生二进制文件、安装时行为和传递更新路径都更少。
  </Card>
</CardGroup>

<Tip>
  Shrinkwrap 本身并不是问题。问题在于糟糕的包结构。
  `v2026.5.28` 仍然包含 shrinkwrap，但嵌套依赖树小得多，而且在本地审计中，全平台的 canvas 扇出已经消失。
</Tip>

## 标题数字

不要把 4 月下旬损坏的行作为公开性能基线。`v2026.4.23` 和 `v2026.4.29` 可用于回归证据，但那些巨大的 `14x` 级别差异主要描述的是从坏发布线恢复的过程。

对于博客叙述，请使用较早的 4 月已发布基线作为尺度。
该基线是来自已发布的 `clawgrit-reports`
mock-provider 运行的 `v2026.4.14`（重复 3 次；那次运行仅因未输出诊断
时间线而失败，因此冷启动、热启动和 RSS 中位数仍可
作为粗略尺度使用）。请将其视为叙述背景，而非发布门禁
统计。

| 指标       | 更早的 4 月基线 | `v2026.5.28` |              差值 |
| -------- | --------: | -----------: | --------------: |
| 冷启动代理回合  |   9,819ms |      1,908ms | 低 80.6%，快 5.1 倍 |
| 热启动代理回合  |   7,458ms |      1,870ms | 低 74.9%，快 4.0 倍 |
| 代理峰值 RSS |   686.2MB |      581.0MB |         低 15.3% |

在 5 月的扫描范围内，最新的发布分支行相较于
`v2026.5.2` 有了显著变化：

| 指标       | `v2026.5.2` | `v2026.5.28` |      差值 |
| -------- | ----------: | -----------: | ------: |
| 冷启动代理回合  |     3,897ms |      1,908ms | 低 51.0% |
| 热启动代理回合  |     3,610ms |      1,870ms | 低 48.2% |
| 代理峰值 RSS |     613.7MB |      581.0MB |  低 5.3% |

与上一稳定版相比：

| 指标       | `v2026.5.27` | `v2026.5.28` |      差值 |
| -------- | -----------: | -----------: | ------: |
| 冷启动代理回合  |      2,231ms |      1,908ms | 低 14.5% |
| 热启动代理回合  |      2,226ms |      1,870ms | 低 16.0% |
| 代理峰值 RSS |      649.0MB |      581.0MB | 低 10.5% |

### 安装占用

| 指标                                          |       基线值 | `v2026.5.28` |      差值 |
| ------------------------------------------- | --------: | -----------: | ------: |
| 相较于 `2026.5.22` 峰值的安装大小                     | 1,020.6MB |     361.7MiB | 低 64.6% |
| 相较于最新发布 `2026.5.27` 的安装大小                   |   767.1MB |     361.7MiB | 低 52.8% |
| 相较于月度高点 `2026.2.26` 的依赖数                    |       645 |          300 | 低 53.5% |
| 相较于最新发布 `2026.5.27` 的依赖数                    |       371 |          300 | 低 19.1% |
| 相较于 `2026.5.22` 的嵌套 `openclaw/node_modules` |   911.8MB |     259.7MiB | 低 71.5% |
| 相较于 `2026.5.27` 的嵌套 `openclaw/node_modules` |   656.1MB |     259.7MiB | 低 60.4% |

### npm 包大小

| 版本          | 压缩后的 tarball |   解包后的包 |    文件数 | 备注           |
| ----------- | -----------: | ------: | -----: | ------------ |
| `2026.1.30` |       12.8MB |  33.5MB |  4,607 | 早期重新命名后的包    |
| `2026.2.26` |       23.6MB |  82.9MB | 10,125 | 功能增长         |
| `2026.3.31` |       43.3MB | 182.6MB | 21,037 | 包大小高点        |
| `2026.4.29` |       22.9MB |  74.6MB |  9,309 | 可见的包裁剪       |
| `2026.5.12` |       23.4MB |  80.1MB | 12,035 | 主要外部插件拆分     |
| `2026.5.22` |       17.2MB |  76.9MB | 12,386 | 文档/资源不再包含在包中 |
| `2026.5.27` |       17.8MB |  79.0MB | 12,509 | 之前的稳定包       |
| `2026.5.28` |       17.9MB |  81.0MB |  9,082 | 最新稳定包        |

`2026.5.12` 是变更日志中可见的插件拆分里程碑：Amazon Bedrock、Bedrock Mantle、Slack、OpenShell sandbox、Anthropic Vertex、Matrix 和 WhatsApp 从核心依赖路径中移出，因此它们的依赖锥体会随这些插件一起安装，而不是每次核心安装都一并安装。

## Kova 代理回合摘要

4 月的稳定线包含两个不同的故事。4 月上旬虽慢，但仍可识别。4 月下旬则变成了回归悬崖。`v2026.5.2` 是 mock-provider 线路首次跌入 3-5 秒区间，并在给定扫描中开始稳定通过的位置。

更早的已发布上下文：

| 发布版本         | Kova |    冷启动回合 |    热启动回合 | 代理峰值 RSS |
| ------------ | ---- | -------: | -------: | -------: |
| `v2026.4.10` | FAIL | 11,031ms |  7,962ms |  679.0MB |
| `v2026.4.12` | FAIL | 11,965ms |  8,289ms |  713.5MB |
| `v2026.4.14` | FAIL |  9,819ms |  7,458ms |  686.2MB |
| `v2026.4.20` | FAIL | 22,314ms | 18,811ms |  810.8MB |
| `v2026.4.22` | FAIL |  9,630ms |  7,459ms |  743.0MB |

给定扫描：

| 发布版本                | Kova |    冷启动回合 |    热启动回合 |  代理峰值 RSS |
| ------------------- | ---- | -------: | -------: | --------: |
| `v2026.4.23`        | FAIL | 47,847ms |  8,010ms | 1,082.7MB |
| `v2026.4.24`        | FAIL | 48,264ms | 25,483ms |   996.0MB |
| `v2026.4.25`        | FAIL | 81,080ms | 59,172ms | 1,113.9MB |
| `v2026.4.26`        | FAIL | 76,771ms | 54,941ms | 1,140.8MB |
| `v2026.4.27`        | FAIL | 60,902ms | 33,699ms | 1,156.0MB |
| `v2026.4.29`        | FAIL | 94,031ms | 57,334ms | 3,613.7MB |
| `v2026.5.2`         | PASS |  3,897ms |  3,610ms |   613.7MB |
| `v2026.5.7`         | PASS |  3,923ms |  3,693ms |   654.1MB |
| `v2026.5.12`        | PASS |  7,248ms |  6,629ms |   834.8MB |
| `v2026.5.18`        | PASS |  3,301ms |  2,913ms |   630.3MB |
| `v2026.5.20`        | PASS |  3,413ms |  2,952ms |   643.2MB |
| `v2026.5.22`        | PASS |  4,494ms |  4,093ms |   654.3MB |
| `v2026.5.26`        | PASS |  2,626ms |  2,282ms |   660.4MB |
| `v2026.5.27-beta.1` | PASS |  2,575ms |  2,217ms |   635.3MB |
| `v2026.5.27`        | PASS |  2,231ms |  2,226ms |   649.0MB |
| `v2026.5.28`        | PASS |  1,908ms |  1,870ms |   581.0MB |

## 源探针

由于这些源代码树当时还没有所需的探针入口点，17 个成功的旧 ref 的源探针被跳过了。这些 ref 仍然存在 agent-turn 指标。

代表性的源探针数据点：

| Release             | 默认 `readyz` p50 | 50 个插件 `readyz` p50 | CLI health p50 | 插件最大 RSS |
| ------------------- | --------------: | ------------------: | -------------: | -------: |
| `v2026.4.29`        |         2,819ms |             2,618ms |        1,679ms |  389.0MB |
| `v2026.5.2`         |         2,324ms |             2,013ms |        1,384ms |  377.2MB |
| `v2026.5.7`         |         1,649ms |             1,540ms |        1,175ms |  387.6MB |
| `v2026.5.18`        |         1,942ms |             1,927ms |          607ms |  426.5MB |
| `v2026.5.20`        |         1,966ms |             1,987ms |          621ms |  455.0MB |
| `v2026.5.22`        |         2,081ms |             1,884ms |        5,095ms |  444.2MB |
| `v2026.5.26`        |         1,546ms |             1,634ms |          656ms |  400.4MB |
| `v2026.5.27-beta.1` |         1,462ms |             1,548ms |          548ms |  394.0MB |
| `v2026.5.27`        |         1,491ms |             1,571ms |          553ms |  401.5MB |
| `v2026.5.28`        |         1,457ms |             1,474ms |          623ms |  386.1MB |

尽管 agent-turn 这条线仍然通过了，表格中仍然可以看到 `v2026.5.22` 的 CLI health 峰值。排查有针对性的 CLI 或网关回归时，请保留源探针。

## 安装体积审计

依赖样本使用每月一个稳定版，再加上 `2026.5.22` 的 shrinkwrap 引入事件，以及最新的 `2026.5.28` 版本。

| Point              | Installed deps | Fresh install | OpenClaw package | Nested `openclaw/node_modules` | Root shrinkwrap | Canvas install behavior        |
| ------------------ | -------------: | ------------: | ---------------: | -----------------------------: | --------------- | ------------------------------ |
| Jan `2026.1.30`    |            605 |       438.4MB |           45.8MB |                          2.4MB | no              | 顶层包装器 + `darwin-arm64`         |
| Feb `2026.2.26`    |            645 |       575.7MB |          110.1MB |                          3.5MB | no              | 顶层包装器 + `darwin-arm64`         |
| Mar `2026.3.31`    |            438 |       584.1MB |          234.8MB |                            0MB | no              | 顶层包装器 + `darwin-arm64`         |
| Apr `2026.4.29`    |            392 |       335.0MB |           97.4MB |                            0MB | no              | 未安装                            |
| `2026.5.22`        |            401 |     1,020.6MB |        1,020.4MB |                        911.8MB | yes             | 嵌套：全部 12 个 `@napi-rs/canvas` 包 |
| May `2026.5.26`    |            371 |       767.5MB |          767.4MB |                        656.4MB | yes             | 嵌套：全部 12 个 `@napi-rs/canvas` 包 |
| `2026.5.27`        |            371 |      767.1MiB |         766.9MiB |                       656.1MiB | yes             | 嵌套：全部 12 个 `@napi-rs/canvas` 包 |
| Latest `2026.5.28` |            300 |      361.7MiB |         361.6MiB |                       259.7MiB | yes             | 未安装                            |

### Shrinkwrap 边界

`2026.5.20` 发布时没有根 shrinkwrap，也没有大型的嵌套 OpenClaw
依赖树。`2026.5.22` 引入了根 shrinkwrap，并在嵌套的 `openclaw/node_modules` 下安装了 911.8MB。`2026.5.28` 保持了 shrinkwrap，且仍然会在嵌套的 `openclaw/node_modules` 下安装 259.7MiB，但在本地 fresh-install 审计中不再安装任何 `@napi-rs/canvas` 包。

已发布 tarball 的检查验证了这个边界：

| Version     | Published stable? | Root `npm-shrinkwrap.json` | Notes                   |
| ----------- | ----------------- | -------------------------- | ----------------------- |
| `2026.5.20` | yes               | no                         | shrinkwrap 之前的最后一个稳定版发布 |
| `2026.5.21` | no                | n/a                        | 没有稳定的 npm 发布            |
| `2026.5.22` | yes               | yes                        | 引入了 shrinkwrap          |
| `2026.5.23` | no                | n/a                        | 没有稳定的 npm 发布            |
| `2026.5.24` | no                | n/a                        | 没有稳定的 npm 发布            |
| `2026.5.25` | no                | n/a                        | 没有稳定的 npm 发布            |
| `2026.5.26` | yes               | yes                        | 嵌套依赖树仍然存在               |
| `2026.5.27` | yes               | yes                        | 嵌套依赖树仍然存在               |
| `2026.5.28` | yes               | yes                        | 嵌套依赖树小得多                |

关键区别在于：**问题并不在 shrinkwrap 本身**。`v2026.5.28` 仍然包含根 shrinkwrap。问题在于包的形态导致 npm 物化出一个很大的嵌套 OpenClaw 依赖树，以及全部 12 个 `@napi-rs/canvas` 平台包。`v2026.5.28` 中嵌套树更小了，而且 canvas 平台分发也 აღარ在本地审计中落地。

有关当前依赖审查和包策略，请参见
[dependency locking](/gateway/security/dependency-locking)。

## 供应链解读

依赖数量不仅是安装体积指标，也是运维安全指标。每个包都会扩大维护者、tarball、传递性更新、可选原生二进制文件以及安装时行为的信任面，运维人员必须信任这些内容。

清理方向是：

* 将沉重且可选的能力放在默认核心安装之外
* 让插件包负责其运行时依赖图
* 避免在 Gateway 启动期间进行运行时包管理器修复
* 在不导致所有平台原生包物化的前提下保持确定性安装
* 在包接受和度量路径中保持禁用安装脚本
* 在发布前捕获嵌套依赖树和原生可选依赖爆炸

相关文档：

* [插件依赖解析](/plugins/dependency-resolution)
* [插件清单](/plugins/plugin-inventory)
* [完整发布验证](/reference/full-release-validation)
