Lighthouse 性能评分低,懒加载图片为啥没生效?

司马志玉 阅读 14

我用 Vue 做了个图片列表页,明明加了懒加载,但 Lighthouse 跑出来还是说“延迟加载首屏外的图片”没通过,性能分卡在 60 多。是不是我的写法有问题?

我试过把 loading=”lazy” 加在 img 标签上,也确认图片都在首屏以下,但 Lighthouse 就是不认。

<template>
  <div v-for="item in images" :key="item.id">
    <img :src="item.url" loading="lazy" alt="示例图" />
  </div>
</template>
我来解答 赞 6 收藏
二维码
手机扫码查看
1 条解答
Zz红辰
Zz红辰 Lv1
你这代码写得有问题,loading="lazy" 确实加上了,但 Lighthouse 检测的是另一种情况。

问题在于你的图片一上来就把 src 设置好了,浏览器解析 HTML 的时候可能直接就开始请求图片资源了,原生懒加载的触发时机 Lighthouse 有时候抓不到。

靠谱的做法是用 data-src 先把真实地址存起来,等图片进入视口再赋值给 src。给你一个 IntersectionObserver 的实现方案:





这样写 Lighthouse 肯定能过,图片只有真正进入视口附近 100px 才会发起请求。

还有几个细节要注意。如果你用 vue-lazyload 这种库也行,但自己写 IntersectionObserver 更轻量,性能开销更小,不用引入额外依赖。记得加个 rootMargin 提前加载,用户体验会好很多,不然用户滚动的时候图片会闪一下才出来。

另外检查一下你的图片有没有设置宽高,没设置的话会导致布局抖动,CLS 那一项也要扣分的。把宽高写死或者用 aspect-ratio 撑开,这个对性能评分影响挺大的。
点赞 1
2026-03-01 03:00