为什么网站打开很慢怎么办
「首页还能忍,点进商品页就转个不停,也不知道是不是服务器不行。」
这句抱怨里其实藏了两个变量:哪个页面、第几次打开。先把这两个变量固定,再谈五段耗时。
| 现象 | 说明 | 先查什么 |
|---|---|---|
| 第一次慢、第二次快 | 缓存或首访资源 | 两次分别记五段 |
| 每次都慢 | 固定成本 | 找最长的那一段 |
| 只有某几个页面慢 | 页面本身 | 按页面类型分组 |
| 只有部分地区慢 | 链路或调度 | 多节点分组 |
| 测着不慢但体感慢 | 渲染侧 | 浏览器网络面板 |
第一次打开慢,再次打开快,说明问题不在服务器
同一页面连开两次,两次都记五段:
`` 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 节点或同一个出口。
分散在各地:回到页面本身,别再从网络下手。
测着不慢但用户喊慢,差在渲染那几秒
五段加起来一秒,用户体感五秒(举例),差的四秒在浏览器里。
去网络面板看瀑布:哪个资源排队、哪个脚本阻塞、有没有第三方域名在等。
这一层测速工具帮不上,只能用浏览器自己的面板对。
两边对不上时,以体感为准去查前端,别拿测速报告反驳用户。
有一点我没确认:按页面类型分组这套做法,对同一页面里多个接口并发的场景够不够用,我手上没有样本,只能先把最长的那一个接口单独拎出来测。