首屏图片需强制预加载并禁用懒加载,正文图片按可视区+缓冲区策略分批懒加载,配合占位符、宽高声明、现代格式与响应式srcset优化性能。

在文章详情页中,长文往往嵌入大量图片,若全部随页面加载,会拖慢首屏渲染、挤占带宽、拉低LCP和CLS等核心指标。懒加载不是“加个属性就完事”,而是要结合内容结构、用户行为和浏览器机制做分层处理。
首屏图片必须秒出,不能懒
文章顶部的封面图、作者头像、首段配图属于LCP关键元素,加载延迟直接导致白屏或FOUC。
- 在
中用<link rel="preload" as="image" href="cover.webp" fetchpriority="high">强制提前请求 - 禁用
loading="lazy",且确保src直接指向最终资源(非占位符) - 显式设置
width和height,或用 CSSaspect-ratio: 16/9防止布局抖动
正文图片按区域分批懒加载,避免滚动卡顿
长文图片通常集中在段落之间,可按“可视区+缓冲区”策略触发:
- 对
<img>统一添加loading="lazy",现代浏览器自动处理(Chrome 76+/Firefox 75+/Safari 15.4+) - 若需兼容旧版或加占位图/错误回退,改用
IntersectionObserver,并设置rootMargin: "300px"提前加载,防止快速滚动时空白 - 每张图初始用轻量 SVG 占位符,如
<img src="placeholder.svg" class="lazy">,加载完成再替换并移除 class
避免懒加载失效的常见陷阱
有些看似正常写的代码,实际不起作用:
- 图片被包在
overflow: hidden或transform容器里,部分 Safari 会判定其永远不可见,不触发加载 <table> 内部的 <code><img>可能被忽略,建议改用<div> 布局 <li>同时写了 <code>src和loading="lazy"又配了 JS 监听,可能造成重复请求(浏览器先拉src,JS 再拉data-src)- 没设宽高,加载后尺寸变化引发强制重排,CLS 扣分严重
- 所有正文图用
<picture></picture>+<source></source>提供 WebP/AVIF,兜底 JPEG,例如:<picture><source type="image/avif" srcset="fig-600.avif 600w, fig-1200.avif 1200w" sizes="(max-width: 768px) 100vw, 600px"><source type="image/webp" srcset="fig-600.webp 600w, fig-1200.webp 1200w"> @@##@@ </source></source></picture>
-
sizes必须匹配实际展示宽度(比如侧边栏图文混排时写33vw而非100vw),否则仍会下载超大图
配合响应式与现代格式进一步减负
懒加载只是起点,真正提速还得靠“请求哪张图”:
不复杂但容易忽略











