安排图片与资源加载的核心不是“全部懒加载”或“全部预加载”,而是先判断资源是否参与首屏呈现:首屏主图、Logo、字体等应优先加载并预留尺寸,首屏之外的图片和次要脚本再延迟加载。把两者颠倒,往往就是页面看起来卡顿、图片跳动、用户以为内容没加载出来的主要原因。
懒加载减少的是初始请求量,但它并不消除成本。如果一张大图位于首屏,却要等 JavaScript 执行后才开始下载,浏览器就白白浪费了并行下载的时间。用户看到的是空白或占位块,而不是更快的内容。
另一种情况是给所有图片都加延迟加载,包括折叠线以上的主视觉。此时首屏最大内容绘制会被推后,滚动前的内容反而最慢出现。判断标准很简单:用户不滚动就能看到的资源,不应依赖滚动事件或脚本触发才加载。
可以把资源分成两类来处理,而不是二选一。
如果两种方案只能选一种,优先保证首屏资源立即加载,其余资源延迟。反过来做,等于把最该快的内容排到了最后。
<img> 上添加 loading="lazy";同时保留宽高属性。检查项可以定为三条:首屏是否在无脚本延迟的情况下出现主图;滚动时图片是否在进入视口前就开始请求;布局是否因图片加载而大幅移动。三条都通过,说明安排基本合理。
假设某页面首屏有一张横幅图,下方还有二十张产品图。若全部延迟加载,横幅也要等脚本,首屏会先空一块;若全部立即加载,二十张产品图会抢占带宽。正确处理是横幅立即加载并预留高度,产品图延迟加载。这个例子只说明取舍逻辑,实际效果取决于图片体积、网络条件和设备性能。
当首屏资源立即加载、其余资源延迟加载,并且图片都有尺寸占位时,页面在慢速网络下也应先呈现主要内容,滚动后再补齐其余图片。下一步可以打开自己网站的一个典型页面,按上面的清单逐项核对,先改首屏那一张图,再处理折叠线以下的资源。