图片懒加载的核心是视口进入时才加载,推荐用Intersection Observer API实现,兼容方案用getBoundingClientRect+节流,需结合loading="lazy"、解码优化、占位图及服务器压缩缓存,并避免首屏关键图懒加载。
图片懒加载的核心是让页面只在图片即将进入视口时才开始加载,避免一次性请求大量图片资源,从而减少初始请求量、降低带宽占用、加快首屏渲染速度。
现代浏览器普遍支持 Intersection Observer,它能高效监听元素是否进入可视区域,无需频繁监听 scroll 或 resize 事件,性能好、代码简洁。
rootMargin(如 "0px 0px 200px 0px" 表示提前 200px 开始加载) 设置 data-src 存放真实地址,src 可留空或指向占位图isIntersecting 为 true 时,将 data-src 赋值给 src,并调用 unobserve() 停止监听对于不支持 Intersection Observer 的环境(如 IE),可用定时检测 + getBoundingClientRect() 判断位置,但需注意性能:
requestIdleCallback 或节流(throttle)控制检测频率,避免阻塞
主线程rect.top = 0 即视为进入视口懒加载不是孤立功能,需结合其他手段才能真正提升感知速度:
添加 loading="lazy" 属性(原生懒加载,对大部分图片生效,但兼容性和控制粒度不如 JS 方案)decoding="async" 让图片解码不阻塞渲染Cache-Control),让已加载图片复用更高效懒加载若使用不当,反而影响体验或 SEO:
src,其余用 data-src