LCP总是超时,图片懒加载反而更慢了怎么办?
我用 IntersectionObserver 做了图片懒加载,结果 LCP 指标反而变差了,首屏大图老是加载很慢。
明明没加懒加载前 LCP 是 1.8s,现在经常飙到 3s 以上。我试过给首屏图加 loading="eager",但好像没起作用?
关键代码大概是这样的:
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
observer.unobserve(img);
}
});
});
document.querySelectorAll('img[data-src]').forEach(img => {
observer.observe(img);
});
是不是首屏图根本不该用懒加载?那该怎么正确处理才能让 LCP 达标?
首屏关键图片必须用
loading="eager"+ 预加载(link rel="preload"),别用 IntersectionObserver 看着它,懒加载只给非首屏图用。正确做法是:
1. 首屏图直接写
src="xxx.jpg",加loading="eager"2. 非首屏图才用
data-src+ IntersectionObserver3. 如果首屏图是背景图或太复杂,用
<link rel="preload" as="image" href="xxx.jpg">提前拉附个修正后的懒加载逻辑(只处理非首屏图):