编程 一行代码搞定图片懒加载!浏览器原生 `loading="lazy"` 全面指南

2025-08-15 11:54:15 +0800 CST views 8

一行代码搞定图片懒加载!浏览器原生 loading="lazy" 全面指南

在网页性能优化中,**图片懒加载(Lazy Loading)**一直是提升首屏加载速度、减少不必要流量消耗的关键手段。
过去,我们常常需要依赖 JavaScript 库(如 lazysizes)或手动基于 Intersection Observer API 实现一套懒加载逻辑,这既增加了开发成本,也增加了浏览器的执行负担。

好消息是——现代浏览器已经为我们提供了原生懒加载支持,只需要 一行 HTML 属性,就能实现高效、可靠的图片懒加载。


什么是 loading="lazy"

loading 是 HTML5 为 <img><iframe> 标签新增的一个属性,用于告诉浏览器何时加载这个资源。它有三个可选值:

含义
lazy延迟加载,直到元素接近视口时才加载
eager提前加载,不管是否在视口内
auto由浏览器自行决定(通常接近 eager 的行为)

最简用法

<!-- 传统方式:需要 JS 监听滚动事件 -->
<!-- <img data-src="image.jpg" class="lazyload" alt="懒加载图片"> -->

<!-- 现代方式:原生支持! -->
<img src="image.jpg" loading="lazy" alt="懒加载图片">

优点:不再需要 data-src、特定 class,也不需要任何初始化脚本。只需一个属性,浏览器就会在图片即将进入视口时自动加载。


原生懒加载 vs JS 懒加载

对比点原生 loading="lazy"JS 懒加载(如 lazysizes)
实现难度极低(1 行代码)较高,需要 JS 逻辑
性能开销零 JS 执行开销JS 会占用部分 CPU
浏览器支持较新浏览器支持所有浏览器可用(含 Polyfill)
灵活性基本够用更可定制(动画、渐进加载等)

为什么要用原生懒加载?

  • 提升首屏加载速度
    避免一次性加载所有图片,减轻网络与渲染压力。
  • 节省流量
    只加载用户实际会看到的图片,对移动端尤为友好。
  • 减少 JavaScript 依赖
    不用额外引入懒加载库,减少 JS 体积与执行开销。
  • 简单可读
    一个属性即可实现,以 HTML 为中心的开发更直观。

使用注意事项

1. 首屏图片不要懒加载

首屏可见的图片(如 Logo、Banner)应立即加载,避免延迟显示。

<!-- 提前加载 -->
<img src="banner.jpg" loading="eager" alt="首屏Banner">

<!-- 或不写 loading 属性 -->
<img src="logo.png" alt="网站Logo">

2. 一定要指定宽高

避免布局抖动(Layout Shift),影响用户体验和 Core Web Vitals。

<img src="article-image.jpg" loading="lazy" width="800" height="450" alt="文章配图">

如果是响应式图片,配合 CSS:

img {
  max-width: 100%;
  height: auto;
}

3. 浏览器支持情况(2025)

浏览器支持版本
Chrome76+
Edge79+
Firefox75+
Safari16+
Opera64+
IE❌ 不支持

兼容性检测 & 降级:

if ('loading' in HTMLImageElement.prototype) {
    console.log('支持原生懒加载');
} else {
    const script = document.createElement('script');
    script.src = 'lazysizes.min.js';
    document.body.appendChild(script);
}

4. 配合 srcsetsizes 做响应式懒加载

<img 
  src="image-800.jpg" 
  srcset="image-400.jpg 400w, image-800.jpg 800w, image-1600.jpg 1600w" 
  sizes="(max-width: 600px) 400px, 800px"
  loading="lazy" 
  width="800" 
  height="450" 
  alt="响应式懒加载图片">

总结

浏览器原生 loading="lazy"Web 性能优化中“小而美”的革新——
它让曾经复杂的懒加载逻辑简化为 一个 HTML 属性,零 JS、零额外依赖,同时提升了网页性能与用户体验。

最佳实践回顾

  1. 对非首屏图片使用 loading="lazy"
  2. 首屏关键图片用 loading="eager" 或省略
  3. 指定 widthheight 防止布局抖动
  4. 可结合 srcset / sizes 做响应式加载
  5. 老旧浏览器可配合 Polyfill 兼容

💡 一句话总结

以前是“懒加载很麻烦”,现在是“懒加载不写都不好意思”!

推荐文章

Vue3 vue-office 插件实现 Word 预览
2024-11-19 02:19:34 +0800 CST
在 Rust 中使用 OpenCV 进行绘图
2024-11-19 06:58:07 +0800 CST
使用 `nohup` 命令的概述及案例
2024-11-18 08:18:36 +0800 CST
JavaScript中设置器和获取器
2024-11-17 19:54:27 +0800 CST
Git 常用命令详解
2024-11-18 16:57:24 +0800 CST
GROMACS:一个美轮美奂的C++库
2024-11-18 19:43:29 +0800 CST
linux设置开机自启动
2024-11-17 05:09:12 +0800 CST
H5保险购买与投诉意见
2024-11-19 03:48:35 +0800 CST
Rust 高性能 XML 读写库
2024-11-19 07:50:32 +0800 CST
gin整合go-assets进行打包模版文件
2024-11-18 09:48:51 +0800 CST
智能视频墙
2025-02-22 11:21:29 +0800 CST
Vue3中如何实现插件?
2024-11-18 04:27:04 +0800 CST
55个常用的JavaScript代码段
2024-11-18 22:38:45 +0800 CST
介绍Vue3的静态提升是什么?
2024-11-18 10:25:10 +0800 CST
20个超实用的CSS动画库
2024-11-18 07:23:12 +0800 CST
nuxt.js服务端渲染框架
2024-11-17 18:20:42 +0800 CST
程序员茄子在线接单