安排图片与资源加载的核心是:先保证首屏可见内容尽快出现,再按需加载首屏之外的图片和非关键脚本。对已有页面,不必推倒重来,按“查现状—定优先级—改加载方式—验证效果”的顺序逐项处理即可。下面是一份可执行清单,每项都说明查什么、怎么查、结果说明什么。
要查的是页面首次打开时请求了哪些文件、各自多大、谁最慢。用浏览器开发者工具的“网络”面板,勾选禁用缓存后刷新页面,按大小和耗时排序。结果说明什么:如果前几个大文件是图片或未压缩的脚本,它们就是首要优化对象;如果请求数量很多但单个都很小,问题更可能出在请求次数而非体积。这一步只做记录,不改动代码。
要查的是哪些图片在用户不滚动时就能看到。把浏览器窗口调到常见尺寸,记录首屏范围内出现的图片。结果说明什么:首屏图片应优先加载,且尽量控制体积;首屏之外的图片适合延迟加载,等用户滚动到附近再请求。判断依据是图片与视口的相对位置,而不是图片在代码里的先后顺序。
要查的是图片的实际像素尺寸和文件格式。右键查看图片信息,或用开发者工具查看其原始宽高。结果说明什么:如果一张 2000 像素宽的图只显示在 400 像素宽的容器里,说明存在明显浪费;如果照片类图片仍用旧格式且体积偏大,可以考虑更高效的格式。适用条件是浏览器支持情况,需要为不支持新格式的环境保留回退方案,不能只赌一种格式。
要查的是图片标签是否写了宽高、是否区分了首屏与延迟加载。给首屏图片写明确的宽高属性,避免加载时页面跳动;给首屏之外的图片加上延迟加载属性。对于文字提到的标签,写成 <img> 并设置 width、height 和 loading 属性。结果说明什么:写了宽高后,布局在图片到达前就能占位;延迟加载生效后,首屏请求数会下降。若延迟加载加上后首屏图片反而变慢,说明把首屏图片也误设成了延迟加载,需要改回。
要查的是哪些脚本阻塞了页面渲染。在开发者工具的性能面板录制一次加载,观察脚本执行与首次绘制的先后。结果说明什么:如果非关键脚本排在内容之前并拖慢了首次绘制,可以改为延迟执行或异步加载;如果脚本之间存在依赖,不能随意打乱顺序。这一步的判断依据是依赖关系,而不是“越晚加载越好”。
要查的是修改前后的关键指标是否真的改善。在相同网络条件下各测一次,记录首屏出现时间、总请求数和总传输量。结果说明什么:如果首屏时间下降而总传输量变化不大,说明优化的是加载顺序;如果两者都下降,说明同时减少了体积。若指标没有变化甚至变差,需要回退最近一次改动再逐项排查,不要一次改太多导致无法定位原因。
下一步建议:先只做第二步和第四步,也就是区分首屏图片并补上尺寸与延迟加载,这两项改动小、可回退,验证有效后再处理脚本顺序和格式替换。