将性能预算纳入构建流程中

Milica Mihajlija
Milica Mihajlija

确定性能预算后,就该设置构建流程来跟踪预算了。有许多工具可让您为所选性能指标定义阈值,并在超出预算时向您发出警告。了解如何选择最适合您的需求和当前设置的方案。🕵?️ ❗️

Lighthouse 性能预算

Lighthouse 是一种审核工具,可以从几个关键方面测试网站:性能、无障碍功能、最佳做法,以及您的网站作为渐进式 Web 应用的性能。

Lighthouse (v5+) 的命令行版本支持根据以下条件设置性能预算

  • 资源大小
  • 资源数量

您可以为以下任何资源类型设置预算:

  • document
  • font
  • image
  • media
  • other
  • script
  • stylesheet
  • third-party
  • total

预算是在 JSON 文件中设置的,定义预算后,新的“超出预算”列将告诉您是否超出任何限制。

Lighthouse 报告中的“预算”部分
Lighthouse 报告中的“预算”部分

Webpack 性能提示

Webpack 是一款强大的构建工具,用于优化向用户分发代码的方式。它还支持根据素材资源大小设置性能预算。

开启 webpack.config.js 中的性能提示,以便在软件包大小超出上限时收到命令行警告或错误。这是一种在开发过程中随时留意素材资源尺寸的好方法。

构建步骤完成后,webpack 会输出一个以颜色标示的资源及其大小列表。超出预算的所有金额都会以黄色突出显示。

突出显示 bundle.js 的 Webpack 输出
突出显示的 bundle.js 超出了您的预算

资源和入口点的默认上限为 250 KB。您可以在配置文件中设置自己的目标。

Webpack 软件包大小警告
Webpack 软件包大小警告 ⚠️

系统会将预算与未压缩的素材资源大小进行比较。未压缩的 JavaScript 大小与执行时间有关,因此执行大文件可能需要很长时间,尤其是在移动设备上。

Webpack 性能优化建议
额外功能:webpack 不仅不会发出警告,还会为您提供有关如何缩减软件包大小的建议。💁?

套装大小

Bundlesize 是一个简单的 npm 软件包,可以根据您设置的阈值测试资产大小。它可以在本地运行,并可与您的 CI 集成。

Bundlesize CLI

指定阈值和要测试的文件,运行 bundlesize CLI

bundlesize -f "dist/bundle.js" -s 170kB

Bundlesize 会将以不同颜色标示的测试结果输出到一行中。

bundlesize CLI 测试失败
bundlesize CLI 测试失败 ❌
通过 bundlesize CLI 测试
通过 bundlesize CLI 测试 ✔️

适用于持续集成的 Bundlesize

如果将 bundlesize 与 CI 集成以自动对拉取请求施加大小限制,则可以充分利用 bundlesize。如果 bundlesize 测试失败,该拉取请求将不会合并。它适用于 GitHub 上的 Travis CICircleCIWerckerDrone 的拉取请求。

GitHub 上的 Bundlesize 检查状态
GitHub 上的软件包大小检查状态

您今天的应用速度可能很快,但添加新代码通常会改变这一状况。使用 bundlesize 检查拉取请求将有助于避免性能下降。Bootstrap、Tinder、Trivago 和许多其他公司都在使用它来控制预算。

使用 bundlesize,您可以单独为每个文件设置阈值。如果您要在应用中拆分 bundle,这尤其有用。

默认情况下,它会测试 gzip 资源大小。您可以使用压缩选项切换到 brotli 压缩或彻底关闭该功能。

Lighthouse 聊天机器人

Lighthouse 聊天机器人

Lighthouse 聊天机器人与 Travis CI 集成,并根据五个 Lighthouse 审核类别中的任何一个强制执行预算。例如,为 Lighthouse 性能得分设置 100 的预算。有时,关注单个数字比关注单个素材资源预算更简单,并且 Lighthouse 得分会将许多因素考虑在内。

Lighthouse 得分 🔔?
Lighthouse 得分 🥳?

将网站部署到预演服务器后,Lighthouse 聊天机器人会运行审核。在 .travis.yml 中,使用 --perf--a11y--bp--seo--pwa 选项为特定 Lighthouse 类别设置预算。尽量保持在绿区,分数不低于 90 分。

after_success:
  - ./deploy.sh # Deploy the PR changes to staging server
  - npm run lh -- --perf=96 https://staging.example.com # Run Lighthouse test

如果 GitHub 上某个拉取请求的得分低于您设置的阈值,Lighthouse 聊天机器人可以阻止拉取请求合并。⛔

在 GitHub 上查看 Lighthouse 聊天机器人的状态
在 GitHub 上查看 Lighthouse 聊天机器人的状态

然后,Lighthouse 聊天机器人会根据更新后的得分对您的拉取请求发表评论。这是一项简洁的功能,有助于在代码更改时就性能展开讨论。

Lighthouse 报告拉取请求的得分
Lighthouse 报告拉取请求的得分 🥳?

如果您发现您的拉取请求因 Lighthouse 得分较低而阻止,请使用 Lighthouse CLI开发者工具运行审核。它会生成一个报告,其中包含有关简单优化的瓶颈和提示的详细信息。

摘要

工具 CLI CI 摘要
灯塔 ✔️
  • 根据资源大小或数量为不同类型的资源设定预算。
Webpack ✔️
  • 基于 webpack 生成的资源大小的预算。
  • 检查未压缩的大小。
bundlesize [套装大小] ✔️ ✔️
  • 基于特定资源大小的预算。
  • 检查压缩后或未压缩的大小。
Lighthouse 聊天机器人 ✔️
  • 根据 Lighthouse 得分计算得出的预算。