图片与资源加载的安排,核心是决定哪些资源在首屏之前加载、哪些延迟到用户需要时再加载。对入门者来说,最实用的做法是:首屏关键图片正常加载并声明尺寸,首屏之外的图片用 loading="lazy" 延迟加载,脚本和样式按是否影响首屏渲染区分处理。这样既避免页面空白过久,也不会让浏览器一次请求过多文件。
安排加载顺序之前,先把页面资源分类,不同类别的处理方式不同。
判断标准很简单:打开页面时不滚动,用户能看到的区域就是首屏。首屏内的资源不要懒加载,否则会拖慢首屏呈现;首屏外的资源尽量懒加载,减少初始请求量。
图片加载通常有两种思路,选择哪一种取决于图片在页面中的位置和数量。
方案一:全部正常加载。所有 <img> 都写 src,浏览器按解析顺序请求。适用条件是首屏图片数量少、页面总图片少、或用户几乎必然滚动查看全部内容(如单张产品大图页)。优点是实现简单、不会出现滚动到才加载的空白;缺点是图片多时初始请求密集,弱网下首屏被拖慢。
方案二:首屏正常加载,其余懒加载。首屏图片照常写 src,首屏外的图片加 loading="lazy"。适用条件是列表页、文章页、图库等图片较多且分布在滚动区域的页面。优点是初始请求少、首屏更快;缺点是滚动过快时可能短暂看到占位空白,需要配合宽高声明缓解。
假设一个页面有 30 张图片,只有顶部 2 张在首屏。全部正常加载会立即发起 30 个请求;采用方案二则初始只请求 2 张,其余在接近视口时才加载。这里的数字仅为说明差异的假设,实际请求数取决于页面结构。
无论选哪种方案,最关键的一步都是给图片写明宽高。没有尺寸声明时,图片加载完成前浏览器不知道它占多大空间,内容会突然下移,这就是布局偏移。写法如下:
<img src="photo.jpg" width="800" height="600" alt="示例图片">
配合 CSS 让图片自适应:
img { max-width: 100%; height: auto; }
这样浏览器在图片下载前就能预留正确比例的空间。懒加载图片同样要写宽高,否则滚动到该位置时仍会跳动。
脚本方面,把不影响首屏的脚本放到 <body> 末尾,或使用 defer 属性,让 HTML 先解析完。样式表如果很大,可拆分出首屏必需的部分,其余延后。字体文件如果非首屏必需,可考虑延迟加载,但要留意文字闪烁问题。
改完之后需要实际检查,而不是凭感觉判断。可以执行以下步骤:
判断结果:如果首屏图片在初始请求中、首屏外图片在滚动后才请求、且滚动过程中没有明显内容跳动,说明安排基本合理。如果首屏图片被懒加载导致迟迟不显示,或大量图片在初始阶段同时请求,就需要调整。
页面会不断增删图片,加载安排也要跟着维护。建议固定检查以下几点:
下一步可以挑一个图片较多的页面,按上面的验证步骤实际跑一遍,记录初始请求数量和布局偏移情况,再决定是否需要把部分图片改为懒加载。