SuperAPI AI 工具集

authoring-benchmarks

测试与质量

查看项目

更新于 10-16 02:34

技能介绍

用途:为 Elements 组件与工具编写浏览器性能基准,回答具体性能问题。浏览器行为即产品行为,因此组件与工具基准默认使用 Chromium。

主要能力:区分性能测试类型——可重复函数、DOM 遍历、状态同步、过滤或组件更新用浏览器基准(*.test.bench.ts);页面加载、Lighthouse 评分或网络资源用 Lighthouse 测试;视觉渲染变化用视觉测试;CI 墙钟时间用 audit-ci 工作流;行为正确性用单元、无障碍、SSR 或集成测试。SSR 基准不能替代浏览器生命周期性能。

约定:基准文件统一命名 *.test.bench.ts,通过 libraryBenchConfig 在 Chromium 运行,与实现放在一起,每个项目一个 vitest.bench.ts 配置。组件基准用 describe(Component.metadata.tag, ...),工具用描述性子系统名,标签体现动作与规模。共享配置为 @internals/vite/configs/bench.js,Core 参考配置为 projects/core/vitest.bench.ts。

设计工作负载:先陈述性能问题,再写语法。需包含产品相关操作、代表性规模、稳定确定性输入、一致迭代、可观察完成点(返回计算值,Lit 更新需 await elementIsStable() 及后续异步更新)、狭窄边界。涉及扩展行为时至少用两种规模;比较单次与批量时先按项归一化。

夹具模式:Vitest 套件钩子不是基准生命周期,应使用 BenchOptions.setup 和 teardown,使夹具在预热和采样运行期间存在。每个用例需设置 throws: true,否则失败基准可能报告空值或 NaN;夹具与数据准备放 setup(不计入采样);teardown 中用 removeFixture() 同步清理;使用真实注册的自定义元素与真实 DOM;强制实际工作,避免重新赋值当前值变成空操作;等待完成,仅测属性赋值会漏掉渲染与异步同步;冷加载与稳态问题分开,预热与浏览器缓存使基准适合稳态,首屏行为用 Lighthouse。纯工具将确定性输入放在回调外并返回结果。

避免无效测量:不要只测 Lit 夹具开销、不要用 beforeAll/afterAll/beforeEach/afterEach 管理基准夹具、不要在计时回调中包含断言、控制台输出、快照或调试日志、不要跨样本累积状态、不要直接比较处理不同项数的 hz、不要以一次噪声本地运行作为回归或优化证据、不要删除样本或加任意延迟隐藏离群值。若操作快于浏览器计时器分辨率,应基准固定批量并归一化;报告 min 为 0 是计时器分辨率警告,不是零成本。

运行:通过 mise 执行仓库命令。在目标项目运行 mise exec -- pnpm run test:bench。单个文件先确保项目构建最新,再运行 NODE_ENV=production mise exec -- pnpm exec vitest bench --run --config=vitest.bench.ts src/<feature>/<feature>.test.bench.ts。收集对比数据时不要并发运行其他浏览器密集任务;回归分析使用同一机器、Chromium 版本、电源状态、命令、输入和构建模式,每个修订至少三次运行并比较中位数。

解读结果:hz 为每秒完成操作数(越高越快),mean 为每操作平均毫秒(越低越快),p75/p99/p995/p999 为尾延迟百分位,min/max 为观测延迟范围,rme 为相对误差(越低越稳定),samples 为计时观测数。中心吞吐用 mean 或其倒数 hz,尾行为用百分位,置信度用 RME。RME 高时检查机器争用、离群值、状态累积、计时器分辨率和不一致工作,重跑后再改实现。批量 N 项时:每项均值 = 批量均值 / N,每项吞吐 = N × 批量 hz。报告需含命令、浏览器/运行时上下文、工作负载规模、跨运行中位数、尾延迟、RME 及任何归一化;除非单变量实验确立因果,否则将观察到的变化描述为相关性。

为项目添加基准支持:无基准任务时按当前 Core 设置,添加使用 libraryBenchConfig 和源别名的 vitest.bench.ts;添加 Wireit 支持的 test:bench 脚本,以基准文件和配置为输入、无输出;依赖基准导入所需的构建;从生产构建输入和库 TypeScript 输出中排除 *.test.bench.ts;确认单元测试发现与覆盖率排除基准文件;在 DEVELOPMENT.md 记录 pnpm run test:bench。除非仓库 CI 策略明确要求,基准为可选;没有基线策略和受控运行器时不要添加不稳定的墙钟阈值。

验证:修改基准代码或配置后,在 projects/<project> 运行 mise exec -- pnpm run lint、mise exec -- pnpm run test、mise exec -- pnpm run build、mise exec -- pnpm run test:bench,并运行 Prettier、对变更 Markdown 运行 Vale、git diff --check,确认生产 dist/ 输出中无基准源码。