如何阅读 Lighthouse 报告而不慌张
一份实用指南:理解性能审计中真正重要的内容,以及哪些可以安全忽略
目录
第一条规则:分数不等于你的网站
第一次打开 Lighthouse 报告时,你会看到一整面数字、按颜色编码的方框,以及一些你从未听说过的警告。自然反应往往是恐慌。分数是红色的。有十七项审计未通过。网站肯定坏了?
很可能不是。Lighthouse 是诊断工具,不是成绩单。这个分数是在实验室条件下运行的合成基准测试——通常是在限速连接上,模拟一台 2017 年的中端手机。它告诉你网站在这个特定场景下的表现,而不是真实用户在实际环境中的体验。
这一点很重要,因为大多数团队会盯着分数,却忽略上下文。对于一个带有实时数据的复杂 Web 应用来说,65 分可能完全可以接受。即使拿到 95 分,如果优化方向不对,用户体验也可能很差。分数是调查的起点,而不是成功指标。
先看什么:Core Web Vitals
先跳过整体性能分数。向下滚动到 Metrics 部分,查看三个数字:Largest Contentful Paint (LCP)、Cumulative Layout Shift (CLS) 和 Interaction to Next Paint (INP)。这些就是 Core Web Vitals,也是 Google 用作排名信号的唯一性能指标。
- LCP 衡量最大可见元素渲染出来需要多长时间。目标:低于 2.5 秒。如果超过 4 秒,用户等待看到有意义内容的时间就太长了。
- CLS 衡量视觉稳定性——页面加载时跳动的程度。目标:低于 0.1。如果超过 0.25,用户可能会因为按钮移动而误点错误内容。
- INP 衡量响应性——页面对点击、轻触和按键的反应速度。目标:低于 200ms。如果超过 500ms,网站会显得迟钝。
这三个指标与真实用户的挫败感相关。在担心其他任何事情之前,先修复它们。
机会 vs. 诊断:理解区别
Lighthouse 将发现的问题分为两类:机会 和 诊断。机会会按预估节省时间排序。诊断则是额外上下文——有些可能是问题,也可能不是。
从机会开始。如果 Lighthouse 说“消除阻塞渲染的资源”可以节省 1.2 秒,那就是一个明确的收益。如果它说“减少未使用的 JavaScript”只能节省 0.1 秒,通常不值得为此重构。
诊断要更微妙一些。“避免 DOM 规模过大”听起来很糟,但如果你的 CLS 正常、INP 也很快,一个较大的 DOM 可能并没有伤害任何人。诊断是线索,不是命令。优先调查那些与你实际指标相吻合的问题。
通常可以忽略的审计项
有些 Lighthouse 警告是历史遗留或过于激进的。以下几项最容易造成不必要的恐慌:
- “未使用 passive 监听器来改善滚动性能” —— 这是一个很少能带来明显改善的微优化。除非你有滚动卡顿的证据,否则可以跳过。
- “图片元素没有显式 width 和 height” —— 这会影响 CLS,但前提是图片确实导致了布局偏移。如果你的 CLS 已经很好,就不要为了通过审计而重构。
- “使用新一代格式提供图片” —— 是的,WebP 和 AVIF 更小。但如果你的图片已经优化过,而且 LCP 很快,这只是锦上添花,不是危机。
- “避免巨大的网络负载” —— Lighthouse 会标记任何超过 1.6 MB 的页面。但一个加载很快的 2 MB 页面,比一个阻塞渲染的 500 KB 页面更好。关注字节是如何交付的,而不只是总量。
当一切都是红色时该怎么办
如果你的 Lighthouse 分数低于 50,并且大多数审计项都失败了,你很可能遇到了以下三个根因之一:
- 未优化的字体。 Web 字体仍然是大多数网站上最容易获得的性能收益。检查你是否加载了六种字重却只用了两种,或者是否在发送 WOFF 文件而不是 WOFF2。
- 阻塞渲染的 CSS 和 JavaScript。 如果你的 First Contentful Paint (FCP) 超过 3 秒,说明有东西阻止了浏览器绘制。检查
<head>中的大型 CSS 文件或同步脚本。 - 过大的图片。 如果你的 LCP 元素是一张图片,而且它有 4 MB,那就是问题所在。压缩它,对首屏以下图片使用懒加载,并使用响应式图片语法。
修复其中一个问题,然后重新运行 Lighthouse。你通常会看到 20–30 分的提升。然后再处理下一个。
实验室数据 vs. 现场数据:现实校验
Lighthouse 在实验室中运行。它会模拟慢连接和慢设备,但无法模拟真实用户行为——人们如何滚动、点击什么、是否处在不稳定的 Wi-Fi 环境中。
要进行现实校验,请将 Lighthouse 结果与来自 Chrome User Experience Report (CrUX) 的现场数据进行比较。CrUX 展示过去 28 天中真实 Chrome 用户对你网站的体验。如果 Lighthouse 说你的 LCP 是 4 秒,但 CrUX 显示是 2 秒,请相信 CrUX。如果两者都很糟,那你确实有一个真实问题。
你可以在 PageSpeed Insights(Lighthouse 的网页版)中找到 CrUX 数据,也可以在 Google Search Console 的“Core Web Vitals”下查看。如果两者不一致,就调查原因。也许你的真实用户使用的是更快的网络。也许 Lighthouse 正在测试一个未优化的开发构建。
何时重新运行 Lighthouse
Lighthouse 存在噪声。连续运行三次,你会得到三个不同的分数,即使是在同一个页面上也是如此。这是因为性能本身是可变的——后台进程、网络抖动和浏览器启发式策略都会影响结果。
要获得稳定的基线,请在禁用所有扩展的无痕模式下运行 Lighthouse,或者使用带有 --preset=desktop 标志的 CLI 来获得更一致的结果。运行三次并取平均分。如果你看到大幅波动(超过 10 分),说明还有其他问题——可能是服务器很慢,或者页面每次加载的资源不同。
每次进行重大更改后都重新运行 Lighthouse。部署了新的字体策略?检查 LCP。对图片使用懒加载?检查 CLS。添加了第三方脚本?检查 INP。性能不是一次性修复;它是一项需要持续守护的预算。
帮助你处理 Lighthouse 发现项的工具
Lighthouse 会告诉你什么慢。它并不总是告诉你如何修复。为此,你需要额外的工具:
- WebPageTest 提供页面加载过程的胶片视图,逐帧展示。它对诊断 LCP 和 CLS 问题非常关键。
- Chrome DevTools Performance panel 会精确显示哪些 JavaScript 正在阻塞主线程。用它来定位糟糕 INP 分数的来源。
- 图片压缩工具 让你可以直接在浏览器中优化图片,这比上传到第三方服务更快,也更私密。客户端图片处理对隐私更有利,因为你的图片从不会离开你的机器。
Lighthouse 是起点。这些工具帮助你完成后续工作。
要点总结
- 你的 Lighthouse 分数是实验室基准,不是对真实用户体验的衡量。恐慌之前,先把它与 CrUX 的现场数据对比。
- 首先关注 Core Web Vitals(LCP、CLS、INP)。这些指标与用户挫败感和 SEO 影响相关。
- 按预估节省时间优先处理机会项。忽略那些与你实际性能问题不一致的诊断项。
- 有些审计项——例如 passive 监听器或新一代图片格式——是微优化。先修复大的问题。
- 运行 Lighthouse 三次并取平均结果。性能是可变的,单次运行可能具有误导性。
FAQ
Q: 为什么我每次运行 Lighthouse,分数都会变化?
A: Lighthouse 在可变条件下测量性能——网络速度、CPU 负载和浏览器启发式策略都会影响结果。请在无痕模式下运行三次,并取平均分,以获得更稳定的基线。
Q: 我应该先优化移动端还是桌面端?
A: 移动端。Lighthouse 默认使用移动端模拟,因为大多数 Web 流量来自移动设备,而移动设备更慢。如果你的移动端分数很好,桌面端分数通常也会不错。
Q: 我的 Lighthouse 分数是 95,但网站仍然感觉很慢。问题在哪里?
A: Lighthouse 衡量的是页面加载,而不是加载后的交互性。检查你的 INP 分数,并使用 Chrome DevTools Performance panel 分析用户点击或滚动时发生了什么。你可能有一个 Lighthouse 没有捕捉到的 JavaScript 问题。
Q: 我需要拿到完美的 100 分吗?
A: 不需要。90+ 的分数已经非常优秀。追求 100 往往意味着优化那些对用户并不重要的东西。专注于真实指标——LCP、CLS、INP——并忽略分数。
Q: 如果我使用了很多第三方脚本,还能信任 Lighthouse 吗?
A: Lighthouse 会将第三方脚本标记为问题,但它并不总能区分哪些是必要的、哪些是不必要的。使用“避免巨大的网络负载”和“减少 JavaScript 执行时间”审计来识别最严重的违规项,然后再决定是否值得保留。
Sources
- “Lighthouse performance scoring” — Google Developers
- “Core Web Vitals” — web.dev
- “Chrome User Experience Report” — Google Developers
- “WebPageTest Documentation” — WebPageTest.org


