先看现象。把首屏 JPG 转成 webp 后文件从 1.9MB 降到 280KB,但 LCP 从 2.6 秒变成 3.1 秒,PSI 提示发现时间变晚。

真正麻烦的地方在于,几个原因的现象几乎一样。转换后图片换了域名,多了一次 DNS 和 TLS 握手。也可能是新文件没有预加载,发现时机比原来更晚。

还有一种情况,webp 的 CDN 节点没有缓存,首次请求回源。

另外,原图有 CDN 预热,新图是冷启动。

上来先对比新旧图的请求耗时

curl -sI https://cdn.example.com/hero.webp -w '%{time_total}\n' -o /dev/null

再往下改回同域并加预加载

add_action('wp_head', function(){ echo '<link rel="preload" as="image" href="/img/hero.webp" fetchpriority="high">'; }, 1);

预热 CDN 缓存

for i in $(seq 1 20); do curl -s -o /dev/null https://cdn.example.com/hero.webp; done

剩下的就是核对图片真实尺寸

identify -format '%wx%h %b\n' hero.webp

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

白天有业务在跑,能验证的部分都压到了晚上做。

怎么算真的好了,看的是同一批现象。LCP 回到 2.3 秒以内,PSI 里该图的发现时间与请求开始时间间隔小于 100ms。

补一句。换格式省的是传输时间,多了握手和回源反而更慢,改前先看网络链路而不是只看文件大小。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189