参考

基准测试

基准测试方法、用例和指标。

基准测试

基准测试套件是 Zero 目标的回归信号:小产物、快速构建、可预测输出和低开销。

在本地运行:

pnpm run bench

报告写入:

.zero/bench/latest.json

趋势产物写入:

.zero/bench/trends/latest.json
.zero/bench/trends/summary.md

测试用例

当前用例包括:

  • hello:最小化输出
  • add:算术运算和辅助函数
  • structs:类型构造和直接字段访问
  • params:多个类型化参数和嵌套调用
  • buffers:固定数组、span、copy/fill 和字节相等性判断
  • parser:类解析器的 token 元数据和直接谓词检查
  • codecstd.codec 循环、varint 长度和 CRC-32
  • parse:扫描器风格的数字解析
  • slicesarenafallibilitybranches:内存视图、固定缓冲区分配风格、显式可失败分支和分支密集型循环
  • module-packagerescue:包图开销和局部 rescue 降低
  • fs-resourcemem-copy-fillzero-hash:针对文件资源元数据、内存辅助函数和确定性字节载荷处理的 Zero 专项用例

这些用例的 Zero 源码位于 benchmarks/zero 目录下。不支持直接可执行运行器的宿主目标会将该用例报告为 skipped 并附上原因,而非导致整个基准测试运行失败。

指标

  • buildMs:编译器命令的挂钟时间
  • runMs:多次重复可执行运行的中位挂钟时间
  • runMinMs:多次重复可执行运行的最小挂钟时间
  • runRuns:每次运行的原始挂钟计时
  • artifactBytes:输出可执行文件大小
  • compressedArtifactBytes:gzip 压缩后的可执行文件大小
  • peakRssBytes:最大常驻内存集大小(可用时)
  • expectedStdoutoutputMatches:用于捕获偏差的语义检查

声明与限制

请谨慎使用这些数据:

  • 构建时间由 buildMs 表示
  • 产物大小由 artifactBytes 表示
  • 压缩大小由 compressedArtifactBytes 表示
  • 运行时间由各用例的运行指标表示

不要将单次本地运行视为权威的性能声明。进程启动、宿主机负载和缓存状态都会影响结果。

选项

更改重复次数:

ZERO_BENCH_RUNS=<n> pnpm run bench

显式运行沙箱后端:

ZERO_BENCH_MODE=sandbox pnpm run bench

沙箱模式会准备一个隔离环境,适用于 CI。本地模式是默认的公开工作流。