时间和人手有限时,图片与资源加载不要按“文件大小排行榜”逐个压缩,而应按“是否出现在首屏、是否阻塞渲染、是否可延后”三件事排序。先处理首屏主图和阻塞渲染的CSS、JS,再处理首屏以下的图片与次要脚本,通常比全局批量压缩更快见效。
假设有一个企业介绍页,首屏是一张横幅大图、一段标题文字、一个导航栏,下面依次是产品图、介绍视频和统计脚本。人手只有半天,可以先把资源分成三类:
常见错误是先把所有图片统一压到很低质量,结果首屏主图模糊,而真正拖慢渲染的同步脚本没有动。排序错了,体验和加载时间都可能变差。
先查看页面头部:如果有一个很大的样式文件或同步脚本挡在内容前面,优先处理它。可行做法包括:把首屏必需的少量样式直接写在页面内,其余样式异步加载;给脚本加 defer 或 async,前提是脚本不依赖页面内容立即执行。
判断结果的方法:在浏览器开发者工具的“网络”面板刷新页面,观察内容首次出现的时间是否提前。如果脚本必须同步执行,例如它决定了页面主体结构,就不要强行异步,否则可能出现布局错乱。
首屏主图通常是最值得先处理的图片。检查项有三个:
例如,横幅图在桌面端显示 1200 像素宽,就准备接近该宽度的版本;再用 <img> 的 srcset 让浏览器按屏幕选择。若使用背景图,则要确认它是否真的属于首屏内容,很多背景图可以改为装饰性渐变或纯色。
产品图、视频、评论区、统计脚本通常可以延后。图片可用 loading="lazy";视频可用 preload="none" 或点击后再加载;第三方脚本可放在页面底部或等用户交互后再注入。
适用条件是:这些资源不影响首屏布局和核心功能。如果一张图在首屏内,或者延后加载会导致页面高度突然变化,就不适合直接懒加载。判断结果可以看滚动到该区域时资源是否才开始请求,以及页面是否出现明显跳动。
如果只有一个人、半天时间,优先完成前两项,通常比追求所有图片都达到最优格式更实际。下一步可以打开一个真实页面的开发者工具,记录首屏内容出现前加载了哪些资源,再按上面的顺序逐项处理。