图像延迟加载:loading=lazy
使用原生 loading 属性推迟屏幕外图像的加载
图像延迟加载:loading=lazy 是 CoddyKit 上的免费 HTML Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 HTML Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 HTML Academy 课程共包含 4 节课。
loading 属性
<img loading="lazy" src="...">会告诉浏览器,等图片即将进入视口时再下载。所有现代浏览器都原生支持这一功能,因此对于图片密集型页面来说,这是最简单的性能优化之一。
“接近视口”的定义方式
浏览器会使用一个较小的启发式边距(通常是首屏下沿以下几千像素)。图片会提前开始加载,因此用户滚动到图片时,它已经完成绘制——注重体验的用户几乎察觉不到延迟加载。
不应使用延迟加载的情况
绝不要对首屏图片或 LCP(最大内容绘制)候选图片设置 loading="lazy"。延迟加载会推迟最重要的视觉元素,从而损害感知速度和核心网页指标。
必须指定宽度和高度
要让延迟加载有效,请为 <img> 指定明确的 width 和 height(或使用 aspect-ratio CSS)。没有尺寸时,浏览器无法预留空间,滚动会导致布局重排,延迟加载的启发式判断也会失效。
<img loading="lazy" src="cat.jpg" width="800" height="600" alt="A cat">iframe 延迟加载
相同的属性也适用于 <iframe>。<iframe loading="lazy"> 会延迟加载首屏以下的地图、视频和社交媒体嵌入内容——否则这些内容会在每次页面浏览时加载数 MB 的第三方 JavaScript。
eager 是默认值
默认值是 loading="eager"(立即加载),通常很少显式写出。在首屏图片上设置 eager 可以作为有用的文档说明,向审阅者表明选择立即加载是经过考虑的。
与 srcset 结合使用
延迟加载与响应式图片配合得非常好。浏览器仍会从 srcset 中选择合适的候选图片,只是延后下载而已。loading="lazy" 与 srcset 之间无需额外协调。
<img
loading="lazy"
srcset="img-400.jpg 400w, img-800.jpg 800w, img-1200.jpg 1200w"
sizes="(min-width: 768px) 800px, 100vw"
src="img-800.jpg"
alt="Hero"
width="800" height="600"
>解码提示
请将延迟加载与 decoding="async" 配合使用,让浏览器在主线程之外解码图片。长时间快速滚动后同时到达多张图片时,这样可以避免在滚动期间阻塞输入处理。
背景图片
CSS 的 background-image 无法原生实现延迟加载。对于首屏英雄图背景,这没有问题;对于首屏以下的背景,请使用 IntersectionObserver,在元素接近视口时再替换为该 URL。
打印行为
打印页面时,无论是否设置了 loading="lazy",浏览器都会立即加载每张图片,以确保打印内容完整。您不需要在打印样式表中为延迟加载的图片添加特殊处理。
衡量节省效果
Lighthouse 的“延迟加载屏外图片”审计会列出所有应设置 loading="lazy" 的图片。在网络面板中按“Img”筛选并查看“Waterfall”视图,可以看到延迟加载产生的分阶段请求——图片画廊的初始请求会大幅减少。
知识检查
为什么不应对页面顶部的英雄图设置 loading="lazy"?
总结
对屏外的 <img> 和 <iframe> 元素设置 loading="lazy",只需一个属性就能获得性能收益。请将它与明确的宽度和高度(用于预留空间)、srcset(用于响应式适配)以及 decoding="async"(保持滚动流畅)结合使用。绝不要将它应用于 LCP 图片或初始视口中可见的任何内容。
常见问题解答
「图像延迟加载:loading=lazy」课时是免费的吗?
是的 — 「图像延迟加载:loading=lazy」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 HTML Academy 课程的其余内容,请升级到 CoddyKit PRO。 HTML Academy 课程共包含 4 节课。
「图像延迟加载:loading=lazy」这节课中我会学到什么?
使用原生 loading 属性推迟屏幕外图像的加载 你通过在浏览器中直接运行的动手代码来练习 HTML Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 HTML Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 HTML Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「图像延迟加载:loading=lazy」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 HTML Academy 课中编写并运行代码吗?
能。每节 HTML Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- async 和 defer 属性
- 预加载、预获取与预连接
- 图像延迟加载:loading=lazy
- 资源提示:modulepreload