「首页还能忍,点进商品页就转个不停,也不知道是不是服务器不行。」

这句抱怨里其实藏了两个变量:哪个页面、第几次打开。先把这两个变量固定,再谈五段耗时。

现象 说明 先查什么
第一次慢、第二次快缓存或首访资源两次分别记五段
每次都慢固定成本找最长的那一段
只有某几个页面慢页面本身按页面类型分组
只有部分地区慢链路或调度多节点分组
测着不慢但体感慢渲染侧浏览器网络面板

第一次打开慢,再次打开快,说明问题不在服务器

同一页面连开两次,两次都记五段:

`` curl -o /dev/null -s -w 'dns=%{time_namelookup} conn=%{time_connect} tls=%{time_appconnect} ttfb=%{time_starttransfer} total=%{time_total}\n' https://你的域名/具体页面 ``

第一次慢、第二次明显快,重点看下载段和首字节段的变化。

这种多数是首访资源和缓存没命中,不在服务端的处理能力上。

两次一样慢,就别在缓存上找原因,往下看。

几个页面要一起比,用宝塔拨测的网站测速把 URL 一次填几条,结果并排看,比一条条打开浏览器快。

每次都慢,看五段里哪一段固定最长

五个数是累计值,段耗时要相减。减完,最长的那个就是固定成本。

DNS 长,先去比两家 DNS 的结果,不要换服务器。

连接与握手长,先按地区分组,看是不是只有几条链路。

首字节长,拆接口;下载长,看体积和请求数。

每一段只对一个方向,别一段慢就全线改。

只有部分页面慢,先把慢的页面按类型分组

把慢的页面列出来,按类型分:列表页、详情页、搜索页、后台页。

同一类型都慢:查这类页面的共同点,比如都调同一个接口、都加载同一批图片。

分散在不同类型:先怀疑单页内容,比如某张图过大、某个脚本报错重试。

分组之后,慢的范围从「整个站」缩到「一类页面」,能改的东西立刻少一半。

只有部分人慢,用地区和运营商把人群切开

用户说慢,先问三个信息:在哪个城市、哪家宽带、几点。

多地区多运营商跑一轮,把慢的节点按省份和运营商排开。

集中在一家运营商:那条链路的事,改站点没用。

集中在几个省:先看是不是同一个 CDN 节点或同一个出口。

分散在各地:回到页面本身,别再从网络下手。

测着不慢但用户喊慢,差在渲染那几秒

五段加起来一秒,用户体感五秒(举例),差的四秒在浏览器里。

去网络面板看瀑布:哪个资源排队、哪个脚本阻塞、有没有第三方域名在等。

这一层测速工具帮不上,只能用浏览器自己的面板对。

两边对不上时,以体感为准去查前端,别拿测速报告反驳用户。

有一点我没确认:按页面类型分组这套做法,对同一页面里多个接口并发的场景够不够用,我手上没有样本,只能先把最长的那一个接口单独拎出来测。