资源有限时,优先处理“影响面大、改动成本低、能直接测量”的问题:先看服务器响应和缓存,再看图片与阻塞渲染的资源,最后才动需要重构的代码。判断依据不是感觉快慢,而是实验室数据与真实用户数据的对比。
页面速度常用三类数据衡量,含义不同:
资源有限时,先看真实用户数据里最慢的那批页面,再用实验室工具复现,比全站盲目优化更省力。
查什么:首字节时间,即浏览器发出请求到收到第一个字节的间隔。
怎么查:用浏览器开发者工具的“网络”面板刷新页面,看文档请求的等待时间;或用一个简单脚本多次请求同一地址,记录耗时分布。
结果说明:若多次测量中位数明显偏高,问题多半在后端或主机,而不是前端。此时优化图片、压缩代码收效很小,应先查数据库查询、接口调用和主机配置。
查什么:静态资源是否带缓存头,重复访问时是否重新下载。
怎么查:在开发者工具中查看图片、样式、脚本的响应头,确认是否包含缓存有效期设置;刷新页面观察这些资源是否显示来自缓存。
结果说明:若每次访问都重新拉取同一批静态文件,说明缓存没生效。给不变的资源设置较长缓存,是改动小、收益稳定的做法;经常变动的页面则不适合长缓存。
查什么:图片实际文件大小,以及显示尺寸与原始尺寸是否匹配。
怎么查:在开发者工具的网络面板按大小排序,找出体积最大的几张图;对比图片原始像素与页面上实际占用的显示宽度。
结果说明:若一张图原始宽度远大于显示宽度,说明存在浪费。压缩、改用更高效的格式、按显示尺寸输出,通常是最容易见效的一步。是否值得转换格式,取决于图片内容和浏览器支持情况。
查什么:首屏出现前,哪些样式和脚本必须下载并执行。
怎么查:在开发者工具的性能面板录制加载过程,观察首屏内容出现的时间点,以及此前加载了哪些文件。
结果说明:若首屏被大量脚本或外部字体拖住,可以考虑延后非关键脚本、精简首屏所需样式。注意:延后加载可能改变交互时机,改完必须回归测试功能。
查什么:一个页面发出多少个请求,其中多少是重复或可合并的。
怎么查:网络面板底部的请求计数,按类型分组查看。
结果说明:请求过多会放大延迟,尤其在移动网络下。合并小文件、移除未使用的资源属于低风险改动;但合并过多可能影响缓存粒度,需要权衡。
用两个维度排序:改动成本和影响页面数量。缓存头、图片压缩往往一处配置全站受益,成本低,应排前面;后端重构、框架升级影响面大但成本高,排在后面。若某一项测量结果已明显异常,即使成本略高也值得优先处理,因为它可能掩盖其他优化的效果。
假设一个页面首字节时间正常、图片已压缩,但首屏仍慢,此时应把注意力转向阻塞渲染的脚本和字体,而不是继续压缩图片。这是根据测量结果调整顺序,而不是照搬固定清单。
每次只改一类问题,改前改后各测一次,记录同一指标。对比时注意:网络环境、设备、缓存状态要保持一致,否则数据没有可比性。若真实用户数据短期内没有变化,先确认改动是否已上线、是否被缓存影响,再判断效果。速度优化不保证固定见效时间,也不保证排名变化,它首先改善的是加载体验。
下一步:打开开发者工具,按上面的清单顺序测一遍你当前最常访问的那个页面,记下服务器响应、缓存、图片体积和阻塞资源四项数据,再决定先动哪一项。