事情本身不复杂,线索都在日志里。LCP 一直卡在 2.6 秒,服务器响应只有 200 毫秒。首屏文字要等一个 30KB 的样式表下载解析完才绘制,而里面大半是后台和打印样式,前台根本用不到。
第一反应是「额外引了字体图标库,整包两百多 KB」,验证下来不成立。
这类报错背后常见的原因有几处,逐个排除就行。全站样式打成一个文件,首屏加载了无关规则。还有一种是关键样式没有内联,必须等外链。
另外,预加载只给了脚本,样式没排优先级。
第一件事是看样式表的体积与耗时
curl -s -o /dev/null -w '%{size_download} %{time_total}\n' https://www.example.com/main.css
再往下统计首屏实际用到的规则占比
grep -c '@media print' main.css
接着关键样式内联,其余异步加载
media="print" onload="this.media='all'"
等前面都确认过,再拆
分
改完先别撤,确认这几项。首屏只保留 12KB 关键样式,LCP 从 2.6 秒降到 1.7 秒,首屏文字不再白屏等待。
首屏样式控制在 14KB 以内能塞进第一个往返,超出的部分异步加载更划算。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
