@chainsafe/benchmark

中文文档
2.1.0发布于 2026/09/18MITES Module构建来源已验证近 30 天下载 1.5万

这是独立维护的叉子 @ dapplion/ 基准。这个Repo现在维持它自己的版本为 @chainsafe/benchmark 和释放时间表。 它来自QQdapplion/基准@1的基座

中文使用文档
文档目录22 节
  1. 快开始
  2. 怎么会这样?
  3. CI 中的音轨性能
  4. 本地音轨性能
  5. 孤立基准文件( Node.js)
  6. 配置
  7. --isolate
  8. --defaultBranch
  9. --persistBranches
  10. --benchmarksPerBranch
  11. --threshold
  12. --compareBranch
  13. --compareCommit
  14. --prune
  15. --persist
  16. --noThrow
  17. --historyLocal , (中文(简体) ), --local
  18. --historyGaCache , (中文(简体) ), --ga-cache
  19. --historyS3 , (中文(简体) ), --s3
  20. 路线图
  21. 比较性能
  22. 添加更多提供者

基准

这是独立维护的叉子 @ dapplion/ 基准。 。 。 . 这个Repo现在维持它自己的版本是: @chainsafe/benchmark 和释放时间表。 它从基地被铲出 @dapplion/[email protected] 并增加了新的功能.

确保新代码不引入 CI 的性能回归. 音轨 :

  • 对基准分支的PR是否包含性能回归?
  • 主分支的新承诺是否包含性能回归?

这种工具既便于用于制定基准,也便于整合过去的基准数据.

快开始

创建基准测试文件但使用 itBench 改为 it

import {describe, itBench, setBenchOpts} from "@chainsafe/benchmark";

describe("Sum array benchmark", () => {
  itBench("sum array with reduce", () => {
    arr.reduce((total, curr) => total + curr, 0);
  });
});

然后运行CLI.

benchmark 'test/perf/**/*.perf.ts' --local

终端检查基准结果

  Sum array benchmark
    ✔ sum array with reduce                                               826.0701 ops/s    1.210551 ms/op   x0.993        578 runs   1.21 s

怎么会这样?

此工具是一个 CLI 工具, 例如使用 :

benchmark 'test/perf/**/*.perf.ts' --s3

上述命令将:

  • 从指定的提供者( AWS S3) 读取基准历史
  • 根据您的选项计算出预览基准( 默认为主分支的最新承诺)
  • 运行基准与上一个比较
    • 在流出结果时收集基准数据
  • 将结果添加到基准历史,并持续到指定的提供者(AWS S3)
  • 如果在CI中张贴一份PR或承诺,并附上可扩展的基准结果比较摘要
  • 如果检测到性能回归, 退出 1

CI 中的音轨性能

以下是 Github 与 S3 历史提供者运行此工具的建议动作 :

name: Benchmark
# Ensure a single benchmark is run at a time
concurrency: cd-benchmark-${{ github.ref }}

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  s3:
    if: always()
    runs-on: ubuntu-latest
    # Ensure both don't run at the same time
    needs:
      - local
      # - ga-cache

    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2-beta
      - run: yarn install --frozen-lockfile

      # Run benchmark with custom tooling and stores the output to a file
      - name: Run performance tests
        run: yarn benchmark --s3
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          # S3 credentials
          S3_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY }}
          S3_SECRET_KEY: ${{ secrets.S3_SECRET_KEY }}
          S3_REGION: ${{ secrets.S3_REGION }}
          S3_BUCKET: ${{ secrets.S3_BUCKET }}
          S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }}
          # Key prefix to separate benchmark data from multiple repositories
          S3_KEY_PREFIX: ${{ github.repository }}/${{ runner.os }}

本地音轨性能

当您努力优化某个函数时, 您可能想知道您的代码是否实际上比先前的执行更快 .

要做到这一点, 您可以在本地保存一个基准历史文件, 并比照先前的代码先运行基准

git checkout master
benchmark test/perf/func.perf.ts --local
  • 不与上一个比较而运行基准
  • 将单一基准数据写入 ./benchmark_data

然后用新代码测量性能

git checkout fix1
benchmark test/perf/func.perf.ts --local
  • 从 ./benchmark_data
  • 运行基准与预览比较
  • 不写入基准数据

孤立基准文件( Node.js)

使用 --isolate 以新进程而不是默认共享进程依次运行每个文件:

benchmark 'test/perf/**/*.perf.js' --isolate --historyLocal ./benchmark_data-isolated

每个工人都继承可执行的节点、运行时旗(包括加载器和 --expose-gc),环境,和工作目录. 每个工人都有文件 下个文件只从之前的工人退出后才开始,释放出其所保留的内存和本土资源. 已完成的工人即使基准代码留下了开口的手柄也退出.

家长仍然拥有历史,综合快照,性能比较,以及单张GitHub报告. 收集失败、基准失败、坠机、工人结果缺失、中断、以及文件重复ID等 --noThrow。允许跳过的文件,但整个运行必须至少产生一个结果.

文件必须是独立的:全局和钩子不跨文件共享,以及 .only 选择每个文件都是本地的。 跨文件使用独有的基准标识 。 切换模式时,使用新鲜的本地历史路径 CI 缓存键,或 S3 前缀;共享进程和孤立的测量不是可互换的基线. 历史命名空间不会自动更改 .

配置

--isolate

在新进程中依次运行每个文件

  • 类型:布尔
  • 默认: 假

--defaultBranch

提供此寄存器的默认分支, 以防止从 Github 取取

  • 类型:字符串
  • 默认 :

--persistBranches

选择要坚持基准数据的分支

  • 类型:数组
  • 默认: 默认分支

--benchmarksPerBranch

限制每个分支机构的基准数目

  • 类型:数量
  • 默认: 无穷

--threshold

每跑新平均时间与每跑预估时间之比考虑失败. 设定为“ 无穷” 以禁用 .

  • 类型:数量
  • 默认: 2

--compareBranch

将新的基准数据与本分支最新可用基准进行比较

  • 类型:字符串
  • 默认: 默认分支

--compareCommit

将新基准数据与具体承诺的相关基准数据进行比较

  • 类型:字符串
  • 默认 :

--prune

当持续历史时,删除与当前 git 历史中不再存在的承诺有关的基准数据

  • 类型:布尔
  • 默认 :

--persist

历史上一直存在的基准数据

  • 类型:布尔
  • 默认 :

--noThrow

即使找到预态回归, 也干净退出

  • 类型:布尔
  • 默认 :

--historyLocal, (中文(简体) ), --local

坚持本地基准历史. 可以指定仅使用默认路径的布尔, 或提供路径

  • 类型:字符串
  • 默认:./基准 数据

--historyGaCache, (中文(简体) ), --ga-cache

Github Actions缓存中的持久性基准历史. 需要 Github 认证 。 可能只指定布尔以使用默认缓存密钥或提供自定义密钥

  • 类型:字符串
  • 默认: 基准 数据

--historyS3, (中文(简体) ), --s3

亚马逊S3水桶中的持久基准历史. 需要 Github 认证

  • 类型:字符串
  • 默认 :

路线图

比较性能

bench compare --from <branch-name | commit-hash> --to <branch-name | commit-hash>
  • 检索基准历史
  • 不要运行基准
  • 从基准到基准的打印比较

添加更多提供者

  • Github 动作缓存:由于 Github 的局限性而无效
  • 提交到寄存器( gh- pages, 或数据分支)

版本与发布记录

@chainsafe/benchmark 共发布 16 个版本,首次发布于 2025/01/10;过去 12 个月发布了 2 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.1.0latest2026/09/181 个月前
2.0.22026/03/307 个月前
2.0.12025/05/011.5 年前
2.0.02025/04/301.5 年前
1.2.32025/01/301.8 年前
1.2.22025/01/291.8 年前

关于 @chainsafe/benchmark 的常见问题

@chainsafe/benchmark 是什么?

这是独立维护的叉子 @ dapplion/ 基准。这个Repo现在维持它自己的版本为 @chainsafe/benchmark 和释放时间表。 它来自QQdapplion/基准@1的基座

如何安装 @chainsafe/benchmark?

在项目目录运行 npm install @chainsafe/benchmark,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 benchmark,可以用 npx benchmark 直接运行。

@chainsafe/benchmark 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/chainsafe__benchmark 是否存在。

@chainsafe/benchmark 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@chainsafe/benchmark 可以商用吗?

@chainsafe/benchmark 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@chainsafe/benchmark 的下载量有多少?

根据 npm 官方下载统计,@chainsafe/benchmark 在 2026/10/10 – 2026/11/08 这 30 天内被下载 15,324 次,日均约 511 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@chainsafe/benchmark 还在维护吗?

最新版本 2.1.0 发布于 2026/09/18(1 个月前);至今共发布 16 个版本,其中过去 12 个月发布了 2 个;首次发布于 2025/01/10。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。