影响网页性能的因素有很多。Lighthouse 性能得分由于 Web 和网络技术的固有性而往往会发生变化,即使页面没有更改也是如此。
变化的来源
性能衡量中的变化是通过影响程度不同的许多渠道引入的。下表列出了几种常见的指标变化来源、它们对结果的典型影响,以及它们在不同环境中可能发生的范围。
来源 | 影响 | 典型的最终用户 | PageSpeed Insights | 对照实验室 |
---|---|---|---|---|
网页不确定性 | 高 | 可能 | 可能 | 可能 |
本地网络变化 | 高 | 可能 | 不可能 | 不可能 |
层级 1 网络可变性 | 媒介 | 可能 | 可能 | 可能 |
Web 服务器可变性 | 低 | 可能 | 可能 | 可能 |
客户端硬件可变性 | 高 | 可能 | 不可能 | 不可能 |
客户端资源争用 | 高 | 可能 | 可能 | 不可能 |
浏览器不确定性 | 媒介 | 确定 | 确定 | 确定 |
下面更详细地介绍了差异来源以及它们对最可能的 Lighthouse 运行时 + 环境组合的影响。 虽然应用的节流和模拟节流方法可用于这三种环境中的任何一种,但典型的最终用户使用的是模拟节流。
网页不确定性
页面可以包含会改变用户体验页面方式的不确定性逻辑,例如,根据广告系列进度更改布局和素材资源的 A/B 测试或不同的广告体验。这是一种故意的、不可移除的差异来源。如果页面的更改影响了性能,Lighthouse 应该能够识别这种情况。这种情况下,唯一的缓解措施应由网站所有者确保在不同运行时测试网页完全相同的版本。
本地网络变化
本地网络存在由于丢包、可变流量优先级和最后一公里网络拥塞而导致的固有变化。使用价格低廉的路由器和许多共享有限带宽的设备的用户通常最容易受到此问题的影响。已应用节流通过应用遮盖底层重试的最小请求延迟和最大吞吐量来部分缓解这些影响。模拟节流通过自行重放网络活动来缓解这些影响。
层级 1 网络可变性
网络互连通常非常稳定,影响微乎其微,但是跨地理位置请求(即测量来自美国的中国网站的性能)可能会开始经历层级 1 网络跃点带来的高延迟。已应用节流通过网络节流来部分掩盖这些影响。 模拟节流通过自行重放网络活动来缓解这些影响。
Web 服务器可变性
网络服务器的负载是可变的,并且并非总是以相同的延迟响应。使用共享托管基础架构的低流量网站通常更容易受到此问题的影响。已应用节流通过在其网络节流中应用最小请求延迟时间来部分遮盖这些影响。模拟节流容易受到此影响,但与其他网络可变性相比,总体影响通常很小。
客户端硬件可变性
网页加载的硬件会极大地影响性能。已应用节流无法很好地缓解此问题。模拟节流通过在模拟期间限制 CPU 任务的理论执行时间,可以部分缓解此问题。
客户端资源争用
当 Lighthouse 正在运行时,在同一机器上运行的其他应用可能会导致 CPU、内存和网络资源争用。恶意软件、浏览器扩展程序和防病毒软件对 Web 性能的影响尤其明显。多租户服务器环境(例如 Travis、AWS 等)也会受到这些问题的影响。由于此问题,同时运行多个 Lighthouse 实例通常也会使结果失真。已应用限制容易受到此问题的影响。模拟节流通过自行重放网络活动并限制 CPU 执行,可以部分缓解此问题。
浏览器不确定性
浏览器在执行任务方面有固有的可变性,这会影响网页的加载方式。这对于应用节流来说是不可避免的,因为在当天结束时,它们只是报告浏览器观察到的任何内容。模拟节流可通过自行模拟执行过程,在估算时仅重复使用浏览器中的任务执行时间,从而在一定程度上缓解这种影响。
节流策略的影响
下表列出了几种常见的指标变化来源、它们对结果的典型影响,以及不同 Lighthouse 节流策略能够在多大程度上减轻其影响。如需详细了解不同的节流策略,请参阅我们的节流文档。
来源 | 影响 | 模拟节流 | 已应用节流 | 无限制 |
---|---|---|---|---|
网页不确定性 | 高 | 未迁移 | 未迁移 | 未迁移 |
本地网络变化 | 高 | 已缓解 | 部分缓解 | 未迁移 |
层级 1 网络可变性 | 媒介 | 已缓解 | 部分缓解 | 未迁移 |
Web 服务器可变性 | 低 | 未迁移 | 部分缓解 | 未迁移 |
客户端硬件可变性 | 高 | 部分缓解 | 未迁移 | 未迁移 |
客户端资源争用 | 高 | 部分缓解 | 未迁移 | 未迁移 |
浏览器不确定性 | 媒介 | 部分缓解 | 未迁移 | 未迁移 |
处理差异的策略
分离外部因素
- 尽可能避免您的网页受到第三方影响。将别人的变态失误所责备永远不会是一件好事。
- 在测试期间隔离您自己的代码的不确定性。如果您的动画是随机显示的,那么您的性能数据也可能是随机的!
- 隔离测试服务器,使其尽可能不受网络波动的影响。如果您担心稳定性问题,请使用 localhost 或同一网络上的机器。
- 隔离客户端环境,使其免受防病毒软件和浏览器扩展程序等外部影响。尽可能使用专用设备进行测试。
如果您的计算机资源非常有限,或者创建干净的环境非常困难,请使用 PageSpeed Insights 或 WebPageTest 等托管的实验室环境来为您运行测试。在持续集成的情况下,请尽可能使用专用服务器。免费 CI 环境和“可爆发性”实例通常非常不稳定。
多次运行 Lighthouse
创建失败的阈值(无论是智能还是编程)时,请使用汇总值(如中位数、第 90 百分位甚至最小值),而不是单个测试。
Lighthouse 运行 5 次的中位数得分是 1 次运行的两倍,并且 pwmetrics 等工具可以自动为您运行 Lighthouse。与完全不测试相比,使用最小值也是一个很大的改进,并且实现起来极其简单,只需运行 Lighthouse 最多 5 次,直到通过测试!