为什么页面FCP很高但Lighthouse评分却不错?
我在用 Lighthouse 测速时发现 FCP(首次内容绘制)经常超过 3 秒,但整体性能评分却有 80 多分,这合理吗?是不是我哪里监控错了?
我页面里有个 loading 动画,用 CSS 控制的,会不会影响了 FCP 的计算?相关样式如下:
.loading {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 4px;
background: #eee;
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0% { opacity: 0.3; }
100% { opacity: 1; }
}
先说 Lighthouse 评分这个事。性能评分不是只看 FCP 一个指标,而是多个指标的加权组合。以 Lighthouse 10 为例,权重分布大概是这样的:LCP(最大内容绘制)占 25%,TBT(总阻塞时间)占 30%,CLS(累积布局偏移)占 25%,FCP 其实只占 10%,SI(速度指数)占 10%。所以你的 FCP 确实拖了后腿,但如果 LCP、TBT、CLS 表现还可以,整体评分拉到 80 多分完全正常。
再来分析你的 loading 动画问题。你这段 CSS 本身不会影响 FCP 的计算时机,但问题可能出在 HTML 结构上。FCP 测量的是浏览器首次渲染任何「文本、图像、非空白 canvas 或 SVG」的时间。注意这里的关键词:文本和图像。
你那个 loading 条是纯 CSS 的背景色块加动画,它不算「内容」,不会触发 FCP。浏览器会觉得「这页面还没渲染出真正的内容呢」,所以 FCP 计时器一直在等,等到真正的文字或图片出来才记录。
我猜你的页面结构可能是这样的:loading 动画先显示,然后 JS 加载数据,最后渲染真正的内容。这种情况下 FCP 被推迟到内容渲染完成,而不是 loading 出现的时间。
要验证这个问题,你可以在 loading 区域加一点文字: