现代浏览器(Chrome 76+、Edge 79+、Firefox 75+、Safari 15.4+)已原生支持loading="lazy",但iOS Safari 15.4前及微信旧版WebView不识别;仅对<img>和<iframe>生效,须配合src/srcset使用,且需确保图片有明确宽高以防误加载。
现代浏览器(Chrome 76+、Edge 79+、Firefox 75+、Safari 15.4+)已原生支持 loading 属性,但兼容性仍有缺口。iOS Safari 在 15.4 之前完全不识别该属性,且部分 Android WebView(如微信内置浏览器旧版本)会忽略它。启用后,loading="lazy" 仅对 <img> 和 <iframe> 生效,其他元素无效。
src 或 srcset 使用,否则无实际加载行为 loading="eager" 可显式关闭懒加载,用于首屏关键图 原生 loading 是浏览器级优化,由渲染引擎直接控制资源请求时机;而 IntersectionObserver 是 JS 层监听滚动 + 手动替换 src,可控性更强但有额外开销。
IntersectionObserver 可自定义阈值、根容器、延迟回调,还能配合占位图、错误重试、渐入动画 onload / onerror 不是所有图片都适合懒加载。加了反而影响体验或 SEO。
loading="eager" 或直接省略该属性 background-image 加载的图片不受 loading 属性控制,此属性只作用于 HTML <img> 的 src srcset + sizes 组合使用时,loading="lazy" 依然生效,但需确保各尺寸资源路径有效,否则 fallback 失败 loading="lazy" 看似简单,但上线后常因边缘情况出问题。
立即学习“前端免费学习笔记(深入)”;
image.jpg?version=2)时,缓存策略需同步更新,否则 lazy 加载可能命中过期资源 loading 属性(某些 HTML 压缩中间件会过滤未知属性) :loading="isLazy ? 'lazy' : 'eager',不能写成 :loading="isLazy"(布尔值会被转成字符串 "true"/"false",无效) src 是否被浏览器自动填充 真正起效的关键不在属性有没有写上,而在图片是否具备可计算的布局高度——如果父容器或图片自身没宽高,浏览器无法预估位置,可能跳过懒加载逻辑直接加载。