使用 Lighthouse 优化网页指标

利用 Chrome 的 Web 工具寻找改善用户体验的机会。

Addy Osmani
Addy Osmani

发布时间:2021 年 5 月 11 日

今天,我们将介绍 Lighthouse、PageSpeed 和 DevTools 中推出的新工具功能,帮助您确定如何改进网站的网页指标

温馨提示:Lighthouse 是一款自动化的开源工具,旨在提升网页的质量。您可以在 Chrome 开发者工具的调试工具套件中找到该工具,并可对任何网页(无论是公共网页还是需要身份验证的网页)运行该工具。您还可以在 PageSpeed InsightsCIWebPageTest 中找到 Lighthouse。

Lighthouse 7.x 包含元素屏幕截图等新功能,可让您更轻松地直观检查影响用户体验指标的界面部分(例如,哪些节点会导致布局偏移)。

我们还在 PageSpeed Insights 提供了对元素屏幕截图的支持,让您能够更轻松地发现一次性网页性能运行问题。

元素屏幕截图,突出显示了导致网页布局偏移的 DOM 节点

衡量 Core Web Vitals

Lighthouse 可以合成衡量核心 Web 指标,包括 Largest Contentful PaintCumulative Layout ShiftTotal Blocking TimeFirst Input Delay 的实验室代理)。这些指标反映了加载、布局稳定性和交互准备情况。Core Web Vitals 的未来中重点介绍的其他指标(例如 First Contentful Paint)也包含在内。

Lighthouse 报告的“指标”部分包含这些指标的实验室版本。您可以将其用作摘要视图,了解用户体验的哪些方面需要您关注。

Lighthouse 性能指标
开发者工具性能面板中的 Web Vitals 通道
DevTools 性能面板中的新版“网页指标”选项会显示一个轨道,其中突出显示了指标时间点,例如上图所示的布局偏移 (LS)。

现场指标(例如 Chrome 用户体验报告RUM 中提供的指标)不存在此限制,并且是对实验室数据的有价值补充,因为它们反映了真实用户的体验。实测数据无法提供您在实验中获得的各种诊断信息,因此两者是相辅相成的。

找出网页指标有待改进的地方

确定 Largest Contentful Paint 元素

LCP 衡量的是感知加载体验。它标记了网页加载期间主要内容(或“最大”内容)已加载并可供用户看到的时间点。

Lighthouse 具有“Largest Contentful Paint 元素”审核机制,该审核机制可以确定哪个元素是最大的内容绘制模式。将鼠标悬停在相应元素上,该元素就会在主浏览器窗口中突出显示。

最大内容渲染时间元素

如果此元素是图片,则此信息是一个有用的提示,表明您可能需要优化此图片的加载。Lighthouse 包含多项图片优化审核,可帮助您了解自己的图片是否可以更好地压缩、调整大小或以更理想的现代图片格式提供。

适当调整映像大小

您还可以发现 Annie Sullivan 编写的 LCP 小书签,只需点击一下,就能使用红色矩形快速识别 LCP 元素。

使用小书签突出显示 LCP 元素

预加载较晚发现的图片以缩短 LCP 用时

如需改进 Largest Contentful Paint,请预加载关键主打图片(如果浏览器较晚发现这些图片)。如果需要在图片可检测到之前加载 JavaScript bundle,则可能会出现延迟检测。

预加载 LCP 元素所用图片

我们经常会收到一些关于预加载 LCP 图片的常见问题,也许值得简要介绍一下。

您能预加载自适应图片吗?。 假设我们使用 srcsetsizes 指定了一个自适应主推图像,如下所示:

<img src="lighthouse.jpg"
          srcset="lighthouse_400px.jpg 400w,
                  lighthouse_800px.jpg 800w,
                  lighthouse_1600px.jpg 1600w" sizes="50vw" alt="A helpful
Lighthouse">

由于向 link 属性添加了 imagesrcsetimagesizes 属性,我们可以使用 srcsetsizes 使用的相同图片选择逻辑预加载响应式图片:

<link rel="preload" as="image" href="lighthouse.jpg"
           imagesrcset="lighthouse_400px.jpg 400w,
                        lighthouse_800px.jpg 800w,
                        lighthouse_1600px.jpg 1600w"
imagesizes="50vw">

如果 LCP 图片是通过 CSS 背景定义的,审核还会突出显示预加载机会吗?是。

无论是通过 CSS 背景还是 <img> 标记为 LCP 图片的任何图片,只要在瀑布深度为 3 或更高时被发现,就会成为候选图片。

延迟加载屏幕外图片,并避免为 LCP 执行此操作

对初始用户体验不至关重要的屏幕外图片可以延迟加载。这种技术会延迟下载图片,直到用户滚动到该图片附近,这可以减少对关键资源的网络争用,在某些情况下还可以缩短 LCP 时间。通过“推迟屏幕外图片”审核有助于:

推迟加载屏幕外图片

首屏上的重要图片(例如 Largest Contentful Paint 图片)不应延迟加载。这样做可能会延迟 LCP 图片加载。Lighthouse 会突出显示是否通过“Largest Contentful Paint image was lazily loaded”审核错误地延迟加载了 LCP 图片:

避免延迟加载 LCP 图片

确定 CLS 贡献

Cumulative Layout Shift 是对视觉稳定性的衡量。该指标用于量化网页内容在视觉上发生的偏移量。Lighthouse 有一个用于调试 CLS 的审核,名为“避免出现较大的布局偏移”。

此审核会突出显示对网页偏移影响最大的 DOM 元素。在左侧的“元素”列中,您会看到这些 DOM 元素的列表,并在右侧看到它们的总体 CLS 贡献。

Lighthouse 中的“避免大幅布局偏移”审核,其中突出显示了影响 CLS 的相关 DOM 节点

借助新的 Lighthouse 元素屏幕截图功能,我们可以直观地预览审核中指出的关键元素,还可以点击以放大,以获得更清晰的视图:

点击某个元素屏幕截图即可将其展开

对于加载后 CLS,持续使用矩形可视化哪些元素对 CLS 的贡献最大,这可能很有价值。您可以在 SpeedCurve 的“Core Web Vitals”信息中心等第三方工具中找到此功能,我喜欢使用 Defaced 的布局偏移 GIF 生成器来:

突出显示偏移的布局偏移生成器

如需全面了解布局偏移问题,我会经常使用 Search Console 的“核心网页指标”报告。这样,我就可以查看自己网站上 CLS 较高的网页类型(在本例中,有助于我自行确定需要花时间改进哪些模板部分):

Search Console 显示 CLS 问题

从没有尺寸的图片中识别 CLS

如需限制由没有尺寸的图片导致的累积布局偏移,请为图片和视频元素添加宽度和高度尺寸属性。这种方法可确保浏览器在图片加载时能够在文档中分配正确数量的空间。

审核没有明确宽度和高度的图片元素

请参阅再次设置图片的高度和宽度至关重要,了解考虑图片尺寸和宽高比的重要性。

从广告中识别 CLS

借助 Lighthouse 发布商广告,您可以找到改善网页上广告加载体验的机会,包括对布局偏移的贡献,以及可能会造成用户很快就能使用您的网页的耗时较长的任务。在 Lighthouse 中,您可以通过社区插件启用此功能。

广告相关审核,突出显示缩短请求时间和布局偏移的机会

请注意,广告是导致网页布局偏移的主要原因之一。请务必:

  • 在视口顶部附近放置非粘性广告时请务必小心
  • 通过尽可能为广告位预留最大尺寸,来消除移位

避免使用未合成的动画

如果繁重的 JavaScript 任务占用主线程,未合成的动画可能会在低端设备上出现卡顿。此类动画可能会导致布局偏移。

如果 Chrome 发现无法合成动画,则会将其报告给 Lighthouse 读取的 DevTools 轨迹,以便列出哪些带动画的元素未合成以及原因。您可以在避免使用非合成动画审核中找到这些问题。

审核以避免使用未合成的动画

调试 First Input Delay / Total Blocking Time / Long Tasks

首次输入衡量的是从用户首次与网页互动(例如点击链接、点按按钮或使用由 JavaScript 提供支持的自定义控件)到浏览器实际能够开始处理事件处理脚本以响应该互动的时间。长时间的 JavaScript 任务可能会影响此指标以及此指标的替代指标,即总阻塞时间。

审核以避免长时间运行的主线程任务

Lighthouse 包含一个避免长时间运行的主线程任务审核,其中列出了主线程上耗时最长的任务。这有助于识别导致输入延迟的最主要原因。在左侧列中,我们可以看到负责执行长时间主线程任务的脚本的网址。

在右侧,我们可以看到这些任务的持续时间。提醒一下,长任务是指执行时间超过 50 毫秒的任务。这被视为阻塞主线程的时间足够长,会影响帧速率或输入延迟时间。

如果考虑使用第三方服务进行监控,我也非常喜欢主线程执行时间轴可视化 Calibre 的可视化这些开销,它会突出显示导致影响互动的长任务的父任务和子任务。

Calibre 的主线程执行时间轴可视化图表具有以下特点:

屏蔽网络请求,以便在 Lighthouse 中查看影响

Chrome 开发者工具支持屏蔽网络请求,以查看移除或无法访问个别资源的影响。这有助于了解各个脚本(例如第三方嵌入或跟踪器)在总阻塞时间 (TBT) 和可交互时间等指标方面的费用。

网络请求屏蔽功能也适用于 Lighthouse!我们来快速了解一下某个网站的 Lighthouse 报告性能得分为 63/100,TBT 为 400 毫秒。深入研究代码后,我们发现该网站在 Chrome 中加载了 Intersection Observer polyfill,但这并非必需的。我们来屏蔽它吧!

屏蔽网络请求

我们可以右键点击开发者工具 Network 面板中的脚本,然后点击 Block Request URL 将其屏蔽。在这里,我们将为 Intersection Observer polyfill 执行此操作。

在开发者工具中屏蔽请求网址

接下来,我们可以重新运行 Lighthouse。这一次,我们可以看到,与总阻塞时间(400 毫秒 => 300 毫秒)一样,性能得分也提高了 (70/100)。

屏蔽耗费大量资源的网络请求后的效果

将成本高昂的第三方嵌入替换为外观

通常使用第三方资源将视频、社交媒体帖子或微件嵌入到网页中。默认情况下,大多数嵌入内容会立即提前加载,并且可能附带会对用户体验产生负面影响的高成本载荷。如果第三方并不重要(例如,如果用户需要滚动屏幕才能看到该第三方),就会造成浪费。

提高此类 widget 性能的一种模式是在用户互动时延迟加载它们。为此,您可以渲染该 widget 的轻量级预览(一个外观),并仅在用户与其互动时加载完整版本。Lighthouse 具有一项审核功能,旨在推荐可通过 Facade 延迟加载的第三方资源,例如 YouTube 视频嵌入。

强调某些昂贵的第三方资源可以替换的审核结果

谨此提醒,Lighthouse 会突出显示会阻塞主线程超过 250 毫秒的第三方代码。这可能会公开各种类型的第三方脚本(包括由 Google 编写的脚本),如果它们所呈现的内容需要滚动才能查看,那么它们可能更值得延迟或延迟加载。

降低第三方 JavaScript 审核费用

核心 Web 指标以外

除了突出显示 Core Web Vitals 之外,最新版 Lighthouse 和 PageSpeed Insights 还会尝试提供具体的指导,以便您在启用源映射的情况下,加快包含大量 JavaScript 的 Web 应用的加载速度。

这包括越来越多的审核来降低网页中 JavaScript 的成本,例如降低对提供用户体验并不需要的 polyfill 和重复项的依赖。

如需详细了解 Core Web Vitals 工具,请关注 Lighthouse 团队的 Twitter 账号和 DevTools 中的新功能

主打图片Unsplash 用户 Mercedes Mehling 提供。