判断标准不是“还能不能再快一点”,而是当前瓶颈是否已经不在前端资源,而在服务器响应、第三方脚本或架构选择上。如果首字节时间长期高于200毫秒,继续压缩图片和合并CSS的收益会很小,应该先调整方向;如果首字节时间正常,但最大内容绘制时间仍不达标,就值得继续优化页面资源。
打开浏览器开发者工具的“网络”面板,刷新页面,记录三个数值:首字节时间、最大内容绘制时间、总阻塞时间。首字节时间反映服务器和网络链路,最大内容绘制时间反映主要内容何时可见,总阻塞时间反映主线程被JavaScript占用的程度。
这三个数值互相独立,不要因为一个指标差就同时改所有东西。
第一项:服务器响应。查什么:首字节时间。怎么查:开发者工具网络面板,或命令行curl -o /dev/null -s -w "%{time_starttransfer}\n" 你的页面地址。结果说明什么:稳定低于200毫秒,说明服务器不是瓶颈,继续优化前端有意义;持续高于500毫秒,应先调整方向,检查缓存策略、数据库查询或主机配置,此时继续压缩图片收效甚微。
第二项:图片和字体。查什么:最大内容绘制元素是什么。怎么查:开发者工具“性能”面板录制加载过程,看最大内容绘制对应的节点。结果说明什么:如果最大内容绘制元素是一张大图或自定义字体,继续优化方向明确,压缩图片、改用现代格式、设置字体显示策略即可;如果该元素是接口返回后才渲染的文本,说明瓶颈在后端数据,继续优化图片没有意义。
第三项:第三方脚本。查什么:总阻塞时间和第三方请求数量。怎么查:网络面板按域名筛选,统计外部脚本;性能面板查看长任务。结果说明什么:第三方脚本占用大量主线程时,继续优化自己的代码收益有限,应调整方向,考虑延迟加载、移除或替换这些脚本。
第四项:缓存与重复访问。查什么:第二次访问时哪些资源仍从服务器重新下载。怎么查:网络面板勾选“禁用缓存”后再取消,观察状态码和大小。结果说明什么:静态资源没有命中缓存,继续优化缓存头配置;如果已经命中缓存但打开仍慢,问题在首次加载或运行时逻辑,方向应转向脚本执行效率。
继续优化的信号:首字节时间正常,最大内容绘制时间或总阻塞时间仍有明显超标,且瓶颈集中在图片、字体、脚本或样式文件。这些属于可替换、可压缩、可延迟的资源,逐项处理通常能看到改善。
调整方向的信号:首字节时间持续偏高,或页面依赖大量服务端计算、实时接口、第三方嵌入。此时继续在前端做小修小补,用户感知的变化会很小。应该先处理服务器响应、数据获取方式或架构选择,再回头优化前端。
还有一种中间情况:各项指标都接近合格线,但用户仍反馈慢。这时不要继续压指标,而应调整方向去查真实设备、弱网环境和地区差异,因为实验室数据与用户实际体验可能不一致。
先花十分钟记录首字节时间、最大内容绘制时间和总阻塞时间这三个数值,再对照上面的清单判断瓶颈落在服务器、资源还是脚本。只选一个最超标的项目动手,改完后用同样的方法复测,确认变化来自这次修改,而不是同时改了多处导致的误判。