# 性能基准

## 方法

`cmd/bench` 生成不同页数的空白 PDF，签名后再验签，打印耗时：

```sh
moon run --release cmd/bench
```

输出格式：`pages,bytes,sign_ms,verify_ms`。

- 签名使用 RSA-2048 / SHA-256，`contents_chars = 16384`；
- 签名耗时包含"整篇 PDF 重写"（见 `DESIGN.md`），不是增量更新；
- 计时使用 `@env.now()`（毫秒）；
- 每次运行会校验结果，失败直接退出；
- 如果单次签名超过 120 秒，基准会失败。

## 参考数据

GitHub Actions `ubuntu-latest`（native，2026-11-10）：

| 页数 | PDF 大小 | 签名 | 验签 |
| --- | --- | --- | --- |
| 1 | 17 KB | 10 ms | 0 ms |
| 500 | 66 KB | 10 ms | 2 ms |
| 2,000 | 216 KB | 17 ms | 6 ms |
| 5,000 | 517 KB | 30 ms | 15 ms |
| 10,000 | 1.0 MB | 53 ms | 30 ms |

同一份数据在 wasm-gc（本机）上：

| 页数 | 签名 | 验签 |
| --- | --- | --- |
| 1 | 40 ms | 3 ms |
| 2,000 | 62 ms | 17 ms |
| 10,000 | 131 ms | 68 ms |

## 结论

- 耗时随文件大小近似线性增长；
- 1 MB 的 PDF 在 native 上签名约 50 ms、验签约 30 ms；
- 主要开销是 PDF 重写和整篇摘要计算，不是 RSA。

## 注意

- CI 共享机器的数字会有波动，上表只用于量级参考；
- 目前没有做流式处理，超大文件（数百 MB）会占用较多内存；
- 后续如果支持增量更新，签名耗时可进一步降低。
