原生loading="lazy"属性可提升含大量图片页面的加载速度和用户体验,现代浏览器通过该属性实现懒加载,图片接近视口时自动加载;对于需兼容旧浏览器或更精细控制的场景,可用Intersection Observer配合data-src实现自定义懒加载函数;建议优先对非首屏图片启用懒加载,结合srcset和sizes优化响应式图片,并预留占位尺寸以避免布局偏移。

图片懒加载能显著提升网页加载速度和用户体验,尤其在包含大量图像的页面中。现代 HTML 提供了原生支持,结合简单函数可高效实现。
使用 loading 属性实现原生懒加载
现代浏览器支持 loading="lazy" 属性,无需 JavaScript 即可实现懒加载。
只需为 img 标签添加该属性:
- lazy:延迟加载,滚动到附近才加载
- eager:立即加载(默认行为)
通过 Intersection Observer 实现自定义懒加载函数
对于需要兼容旧浏览器或更精细控制的场景,可用 JavaScript 实现。
立即学习“前端免费学习笔记(深入)”;
基本思路是将真实图片地址存于 data-src,用 JS 检测元素是否进入视口:
function initLazyLoad() {
const images = document.querySelectorAll('img[data-src]');
const imageObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
img.removeAttribute('data-src');
imageObserver.unobserve(img);
}
});
});
images.forEach(img => imageObserver.observe(img));
}
HTML 写法:
性能优化建议
合理使用懒加载可减少初始请求、降低内存占用、加快首屏渲染。- 优先对视口以下的图片启用懒加载,首屏关键图片应立即加载
- 配合 srcset 和 sizes 提供响应式图片,减少带宽浪费
- 给懒加载图片预留占位尺寸,避免布局偏移(CLS 优化)
- 低版本浏览器可降级使用 scroll 事件监听,但注意节流防抖











