先把当时的情况摆出来。CrUX 里 LCP 的 75 分位是 2.4 秒显示良好,90 分位却是 6.8 秒,移动端近一成用户打开要等七八秒,报表看起来却一直是绿的。

原因不止一个,得分开看。字段报告只看 75 分位,长尾用户的慢请求被平均掉。少数情况下是低端机型和弱网用户集中在 90 分位。

另外,首屏图在慢网下要下载三秒以上。少数情况下是第三方脚本在弱网下阻塞更明显。

第一件事是看三个分位的完整分布

curl -s "https://www.example.com/crux?url=https://www.example.com/&formFactor=PHONE" | Select-String "p75|p90"

随后按设备类型单独取一份

curl -s "https://www.example.com/crux?url=https://www.example.com/&formFactor=PHONE" -o crux.json

给弱网用户降级首图

echo '<link rel="preload" as="image" href="/hero-small.jpg" media="(max-width:480px)">';

限制第三方脚本执行时机

echo '<script src="/stat.js" defer></script>';

这类改动我都写进变更记录,过两周再出问题时能对上号。

我习惯把每一步的执行时间和结果记在一边,后面复盘省事。

怎么算真的好了,看的是同一批现象。90 分位从 6.8 秒降到 4.5 秒以内,移动端 75 分位仍保持在 2.5 秒以下。

只看 75 分会漏掉最慢的那批用户,三个分位数要放在一起看。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189