调试一则:图片加载导致的布局抖动

CLS 一直降不下来,最后发现是说说图片没写宽高比。

1 分钟
目录

Lighthouse 跑出来 Performance 88,CLS 0.21,主要失分在布局抖动。

定位

Performance 面板里看到每次进入 /moments,图片加载完成后整列内容会向下跳一次。原因很直白:<img> 没有显式尺寸,浏览器在图片下载完成前不知道要占多高,只能先按 0 排版,加载完再重排。

修法

给所有图片容器写死宽高比:

.moment-img {
  aspect-ratio: 1 / 1;
  width: 100%;
  object-fit: cover;
}

配合 loading="lazy" 和骨架占位,CLS 降到 0.02。

教训

布局抖动基本都来自"尺寸在加载后才确定"——图片、字体、异步插入的横幅。逐个消灭这三样,CLS 就下来了。

#前端#性能#随笔

评论