网站首屏慢但接口不慢:问题多半不在服务端
接口很快,首屏还是慢
一个后台系统,接口普遍几十毫秒,用户却说打开首页要等两三秒。我先去看服务器,CPU、内存、数据库都正常。
后来用浏览器打开网络面板,才发现首页要加载几十个资源,其中两个脚本还是阻塞渲染的。那次之后我先看资源数,再看服务器。
五段测的是一个请求
测速工具测的是某一次请求:DNS、TCP、TLS、TTFB、下载。
首页 HTML 很快,只说明文档本身快。它引用的 CSS、JS、字体、图片,是另外的请求,各自有各自的耗时。一次请求的耗时再漂亮,也不代表整页的耗时可接受。
所以「接口快」和「首屏慢」完全可以同时成立。
单独测资源
把首页里最大的几个资源地址拿出来,逐个用宝塔拨测的网站测速测。
如果某个 JS 文件下载段特别长,那就是体积或者带宽的问题。
如果静态资源 TTFB 很高,可能是 CDN 没命中、回源慢,或者走了动态处理。
字体文件也常被忽略,一个没压缩的中文字体能有好几兆。把资源列表按体积排个序,前十名通常就能解释大半问题。
关键渲染路径
浏览器拿到 HTML 后,遇到阻塞脚本会停下来等它下载并执行。
CSS 也会阻塞渲染。第三方统计、客服脚本、字体服务,任何一个慢,首屏都会被拖住。
如果这些资源来自不同域名,每个域名还要重新解析、连接、握手,成本会叠加。预加载和 defer 能缓解,但前提是资源本身别太大。
三条线分开测
我通常会测三个地址:首页 HTML、一个关键接口、一个最大的静态资源。
首页快、接口快、资源慢,问题在前端资源和分发。
首页慢、接口快,问题在模板渲染,或者首屏依赖的接口串行。
三个都慢,才轮到查服务器和带宽。三条线分开测,比笼统测首页有用得多。首屏时间和接口耗时不是一个指标,别拿一个证明另一个。用户看到的是白屏,不是你的 TTFB。
复测和验证
改完压缩、拆包、加预加载之后,用同一批节点复测同一批资源,看下载段有没有下降。
浏览器侧再看一眼首屏时间,确认用户感知真的变好了。
服务端指标好看,不等于用户打开得快。这两件事得分开验证。
优化资源顺序,有时比换服务器有用。第三方脚本经常超时,考虑异步加载或者去掉,别让一个统计脚本拖垮整页。给前端定一个性能预算,超了就查,比临时优化靠谱。记录里写清资源 URL 和体积,下次对比才有依据。