视频详情页首屏是一个 video 元素,poster 图 2.1MB 且没有 preload,LCP 一直在 3.4 秒,视频本身是点击后才加载,问题全在封面这一张。

一开始怀疑是「video 元素没有设置尺寸,封面加载前占位高度为 0」,查了一圈,方向不对。

这类报错背后常见的原因有几处,逐个排除就行。poster 用了原始截图,没有按屏幕宽度裁剪。还有一种是poster 没有 preload,要等解析到 video 标签才开始下载。

还有一种情况,封面图走的是不带 CDN 的源站域名。

动手时先确认 LCP 元素和资源大小

curl -s https://www.example.com/v/1 | grep -o 'poster="[^"]*"'

量 poster 的真实体积

curl -sI https://cdn.example.com/v/1-poster.jpg | grep -i content-length

给 poster 加 preload 和尺寸

grep -n 'poster' templates/video.html

末了换成分辨率适配的封面

curl -o p.jpg 'https://cdn.example.com/v/1-poster.jpg?x-oss-process=image/resize,w_720'

中间停过一次,把已经改的东西回滚干净,再重新来一遍。

改完先别撤,确认这几项。poster 体积降到 120KB 且提前加载,移动端 LCP 降到 1.8 秒,video 占位高度稳定不再跳动。

video 的封面在关键渲染路径上,别把它当普通图片处理,preload 和尺寸缺一个都会拖慢首屏。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189