先别急着把图片压小。web.dev 的 LCP 指标说明里有一处细节值得先看清:资源下载完成的时间,不等于它被渲染出来的时间,页面在资源预加载或者渲染被推迟的情况下,这两者之间会出现更大的间隔。也就是说,把图压小能缩短下载那一段,但如果它还要等脚本执行完才显示,LCP 一点也不会变。真正该做的是按环节查,而不是凭感觉调参数。 如果首屏主图仍在懒加载,可对照WordPress 首屏图片的 LCP 处理方法单独核验。
先确定 LCP 元素是谁
在查因之前先确认对象。同一份说明写明:LCP 记录的是视口内最大的图片、文字块或视频的渲染时间,参照的是用户开始访问页面的那一刻。计入的候选只有几类——<img> 元素、<svg> 里的图像、<video> 元素、用 url() 设的背景图(CSS 渐变不算),以及含文字节点的块级元素。
还有两条会改变答案的规则:用户一旦点击、滚动或按键,浏览器就停止上报新的 LCP 元素;页面在后台标签打开时,Google 的工具不报这个指标。所以同一页在实验室和真实数据里 LCP 元素不同,不必先怀疑工具坏了。
第一段:服务器响应怎么查
这一段是 TTFB,即从用户点击到收到 HTML 第一字节的时间。web.dev 的 Web Vitals 说明把 TTFB 和 FCP 列为辅助指标,写明它们的价值之一正是诊断 LCP 时遇到的服务器响应慢、渲染阻塞资源这类问题;同一页也给出三项核心网页指标的阈值:LCP 2.5 秒、INP 200 毫秒、CLS 0.1,按第 75 百分位衡量、移动与桌面分开。
两个差值是这一段的分界线:TTFB 到 FCP 的差值很大,通常意味着要下载很多阻塞渲染的资源;FCP 到 LCP 的差值很大,意味着 LCP 元素在初始 HTML 里不可用,或者浏览器在干别的活。TTFB 高的常见来源,按官方列举的方向是多次服务器重定向、访客离服务器远、网络条件差、因为带查询参数而用不上缓存内容。这一段是服务器与缓存层面的事,不在主题里,站内旧文加速先选插件还是调服务器把这条分工讲过,可以先看它再决定动哪一侧。
第二段:资源有没有被尽早发现,怎么改
接下来这一段是"从 HTML 返回到浏览器开始取这个资源之间"的时间加上资源本身的下载时间。判断方法很直接:看首屏 HTML 里能不能直接看到那张图。web.dev 讲最有效的优化做法那一页在 LCP 那一节把这套判断写成了几条:图片地址应该能从 HTML 返回里被发现,用 <img> 的 src 或 srcset,不要用需要 JS 才能还原的 data-src 这类写法;如果只能由外部 CSS 或 JS 引用,就在 HTML 里补一个 link rel="preload";服务端渲染优于客户端渲染。
同一页给的三个具体动作是:给首屏图加高优先级、确认首屏图上没有 loading="lazy"、把和它抢带宽的无关资源延后或改成延后加载。三件事一起做完再看差值,别只动其中一个。
第三段:下载完成到画出来之间怎么处理
这一段就是开头说的那个间隔。资源早就下载完,元素却迟迟不出现,典型原因是等 CSS 加载完才确定尺寸、等字体到位才排版、等脚本初始化完才把隐藏区块显示出来。开头那份说明还提醒:加载时间与渲染时间之间的间隔可能大到让报告里出现"LCP 比首次内容绘制还早"这种看着不可能的结果。
对应的动作是:让首屏图不依赖 JS 就能画出来;把必须先执行的样式和字体声明放进首屏 HTML;去掉把内容藏到脚本执行完才显示的写法。这里有个反直觉的边界:内联的是样式,不是字体文件本身——把字体文件塞进 HTML 会让主文档更大,反而推迟其他资源被发现的时机。
三段合成一张表,照着走就行。顺序不能颠倒:先确认测的是哪个元素,再往下走,否则容易在第三段花时间,而原因在第一段。
| 这一段 | 先看哪个数 | 常见成因 | 怎么验证 |
|---|---|---|---|
| 服务器响应 | 首字节时间 | 主机响应慢、缓存未命中、查询多 | 首字节时间是否下降,LCP 是否跟着动 |
| 资源发现 | 关键资源的请求起点 | 首屏图排在无关资源之后、被样式挡住、误加懒加载 | 网络面板里看请求顺序 |
| 渲染 | 主线程占用 | 脚本执行、字体替换、样式计算量大 | 主图是否还在等脚本 |
图片托管在别处、脚本来自第三方时,先做完站内可控的部分。
什么时候不要只盯 LCP
四种情况先把注意力挪开。一是这页是列表页或归档页,真实访客可能滚到很下面才停,LCP 元素在实验室里定得比实际小,改它收益有限。二是 LCP 元素在不同访客之间差异极大(登录状态、A/B 版本、屏幕尺寸都会换掉它),模板级的统一改法不一定对症。三是短板在 INP 或 CLS 上——判定要看三项是否都在第 75 百分位上过"好"这一档,只把 LCP 压到达标,整页状态仍然不会变。四是首屏就是文字加系统字体,优化空间天然有限。
另外两项也在拖后腿的话,先去处理它们。前台还有哪些长期占用资源的组件,站内旧文哪些插件会拖慢速度和缓存、数据库与前端文件的按需优化已经按层拆过,不必在这篇里重讲。
改完怎么确认
验证的方式是把三个差值分别记下来再复查:改完之后 TTFB 到 FCP、FCP 到 LCP 这两个差值各自有没有变化。只改善其中一段而总数没动,说明负担被转移了——比如图确实下得更快了,但渲染那一步在等别的东西。真实数据那一侧要按 URL 分组看状态,并确认移动与桌面两端都没有被牺牲。
最后把预期放对:这些阈值是 Google 给出的建议性体验目标,官方没有公布它与搜索排名位置之间存在任何换算关系。把 LCP 当成一个可测量的体验指标来管理,比当成排名开关更站得住。
