网站慢?先别急着动代码!我用这套「分层排查法」5 分钟揪出元凶

0 阅读11分钟

做前端第 5 年,我一度以为「网站慢 == 代码烂」。直到有一次,我把首屏从 4s 优化到 1.8s,用户依然在群里刷屏「你们网站怎么这么卡」——那次之后我才彻底明白:前端的网络认知,远远不止 F12 里的那条 Network 面板。

如果你也是看到「网站慢」就条件反射地去查 Bundle 体积、加 Skeleton、上 CDN,那这篇文章可能会让你少加两次班。


一、先搞清楚:用户说的「慢」,到底慢在哪?

很多同学排障时会陷入一个误区——把「慢」当成一个原子问题去解决

但实际上,从用户在浏览器里敲下回车,到他看到完整页面,中间至少要经过这 5 层:

层级阶段常见慢的原因
1DNS 解析域名被污染、DNS 服务器抽风、TTL 设置不合理
2网络链路跨运营商绕路、路由抖动、骨干网拥塞
3TCP/TLS 握手服务器端口被封、TLS 证书链冗长、防火墙策略
4服务器响应接口慢查询、CDN 回源、IP 被墙
5浏览器渲染主线程阻塞、布局抖动、资源未压缩

前端通常只盯着第 5 层看,因为 Chrome DevTools 看到的就这一层。但真正让用户血压飙升的「打不开」「转圈圈」,往往出在第 1~4 层。

更扎心的是:你在公司 Wi-Fi 里点哪儿都丝滑,可能在用户的家庭宽带里就是另一个故事。

所以排障的第一步永远是——别相信你自己的电脑。要从全国各地、各个运营商的视角去看你的网站。

下面这套「五步分层排查法」,是我在踩了大约 N 次坑之后总结出来的。每一步都对应一个具体工具,一步一步往下排,基本不会漏掉问题。


二、第一步:DNS 解析层 —— 你的域名真的「能找到」吗?

为什么从 DNS 开始查?

DNS 是用户访问网站的第一道关卡。这一步出问题,后面所有的优化都白搭。

我见过最离谱的一个 case:用户反馈某个营销页打不开,前端、后端、运维三个人查了半天发现 CDN 没问题、源站没问题、HTTPS 证书也没问题——最后发现是某省的运营商 DNS 把这个域名解析到了一个完全错误的 IP

这种问题在本地 ping 一下永远查不出来,因为你电脑用的可能是 8.8.8.8 或者 114.114.114.114,但用户用的是当地运营商默认的 DNS。

怎么排查?

要做的事情很简单:让全国各地的 DNS 服务器同时帮你解析一次域名,看看返回的 IP 是不是一致的

如果你发现:

  • 返回的 IP 五花八门 → 可能存在 DNS 劫持
  • 某些地区返回的 IP 和源站完全无关 → 可能被污染
  • 解析超时 → DNS 配置或 NS 节点有问题

这时候哪怕你前端写得再快,用户也根本到不了你这台服务器。

推荐工具:BiuPing 多地 DNS 查询,能同时查 A、AAAA、CNAME、MX 记录在全国各运营商节点的解析结果,一眼看出有没有被污染或劫持。


三、第二步:网络链路层 —— Ping 通了,但延迟到底正不正常?

DNS 没问题之后,接下来要看用户能不能稳定地连到你的服务器

一个反直觉的事实

Ping 值低 ≠ 网络好。

我之前接了一个游戏行业的客户,他们的服务器 Ping 值常年稳定在 30ms 以内,看起来非常完美。但玩家依然反馈「卡顿」「掉线」。

后来用持续 Ping 跑了 5 分钟才发现:平均延迟确实是 30ms,但抖动(Jitter)能从 20ms 飙到 200ms,丢包率偶发到 3%。

对于实时性要求高的场景(直播、游戏、视频会议),这种「平均值好看但抖动巨大」的网络,体验比平均延迟 100ms 但稳定的网络还差。

排查的三个关键指标

  • 平均延迟:低于 50ms 算优秀,100ms 以内算正常
  • 丢包率:超过 1% 就要警觉,超过 3% 用户体感非常明显
  • 延迟抖动(Jitter) :方差越小越好,最好在 ±10ms 以内

光看一次 Ping 是没用的,必须持续 Ping 至少 3~5 分钟,才能暴露真实的链路质量。

如果延迟高、丢包多,怎么办?

这时候光看 Ping 已经不够了,要上路由追踪(Traceroute / MTR) ——把数据包从用户到服务器经过的每一跳路由全部列出来,看看是哪一跳开始变慢、哪一跳开始丢包。

最常见的几种路由问题:

  1. 跨运营商绕路:电信用户访问联通服务器,结果数据包跑到香港绕了一圈才回来
  2. 某个节点拥塞:明明前面 5 跳都很快,突然在某一跳延迟飙到 300ms
  3. 国际链路抖动:晚高峰跨境出海的链路,几乎每天都在飙

推荐工具:多地持续 Ping路由追踪 MTR,可以从全国电信/联通/移动线路同时发起,一眼看出是哪个运营商的哪一跳出了问题。


四、第三步:TCP / 端口层 —— 不是所有不通都是「Ping 不通」

这一步专治「Ping 通但访问不了」

有些场景下 Ping 完全通、延迟也漂亮,但用户就是打不开网站。这种情况八成是端口层面的问题。

最常见的几个坑:

  • 服务器装了防火墙,把 ICMP 放过了但 80/443 给封了
  • 云厂商安全组没开端口
  • 服务进程挂了但服务器还活着
  • 某些地区运营商封了特定端口(比如经典的 80 端口被运营商拦截)

很多公网服务器为了防 DDoS,直接禁了 ICMP 协议——也就是说 Ping 命令永远不通,但 TCP 连接是正常的。这时候你 Ping 一万次都没用。

怎么排查?

要用 TCPing——直接对目标端口发起 TCP 握手,能握上就是通的,握不上就是端口有问题。

排查思路:

  1. 先 TCPing 80 / 443 端口,看用户能不能连上你的 Web 服务
  2. 如果是 API 服务,TCPing 你的实际端口(比如 8080、3000)
  3. 多线路同时测,看是不是只有某个运营商连不上

我之前帮一个朋友排查他的小程序后端,就是用这招发现:移动用户连他的 8443 端口全部超时,电信联通正常——后来发现是云厂商的国际带宽出口被劫持,换了个端口就好了。

推荐工具:在线 TCPing,专门用来在禁 Ping 环境下测端口连通性。


五、第四步:HTTP 响应层 —— 这才是「网站测速」该看的东西

到这一步,前面的链路都是通的,接下来才轮到 HTTP 这一层。

很多人理解的「网站测速」就是「打开看几秒加载完」,但这个指标太粗了——慢可以慢在很多地方,你得知道到底慢在哪个环节

一个完整的 HTTP 请求要经过这些阶段

阶段含义慢的原因
DNS Lookup解析域名DNS 服务器慢、TTL 太短反复解析
TCP Connect三次握手链路远、丢包重传
TLS HandshakeHTTPS 握手证书链长、未启用 TLS 1.3、未启用 OCSP Stapling
TTFB服务器返回首字节时间后端慢查询、CDN 回源、应用初始化慢
Content Download下载内容资源体积大、带宽不足

如果你看到 TTFB 特别高(比如超过 500ms),那基本可以确定不是前端的锅——是后端响应慢,或者 CDN 没命中在回源。

如果你看到 TLS 握手特别慢(比如超过 200ms),那大概率是证书链有问题,或者没启用 HTTPS 性能优化。

如果你看到 DNS 解析特别慢(比如超过 100ms),看回第一步。

实战中的小技巧

测速一定要测多地

我有个客户的网站,他自己测开是 1.5s 内首屏,体验非常丝滑。但他的用户主要在新疆和云南——那边测出来 TTFB 直接 2 秒起步。后来在西部加了一个 CDN 节点才解决。

推荐工具:多地网站测速,能给出 DNS / TCP / TLS / TTFB / 下载 完整的瀑布流,清清楚楚看到时间花在哪一步。


六、第五步:IP 信誉层 —— 90% 的前端都没听过这个概念

这一步是最容易被忽略、但也最容易被「莫名其妙的问题」坑到的一层。

什么是 IP 信誉?

互联网上有大量的威胁情报机构(比如 Spamhaus、AbuseIPDB、各种反钓鱼联盟),它们会维护一份「黑名单 IP 库」。任何被举报过发垃圾邮件、被滥用、被认为是代理或 Tor 出口的 IP,都会被记录在案。

很多 CDN、邮件服务、风控系统、海外服务,都会读取这些黑名单,对黑名单上的 IP 直接拒绝服务或者降级处理。

这跟前端有什么关系?

关系大了。我亲眼见过几种情况:

  1. 公司换了云服务器后,邮件全部进对方的垃圾箱——因为新 IP 在黑名单上
  2. 海外用户访问某些功能直接 403——因为 CDN 把这个 IP 判成了高风险
  3. 接入第三方支付/登录回调失败——因为对方风控把出口 IP 识别成了机房代理
  4. Google reCAPTCHA 一直要求验证——因为 IP 信誉评分太低

这些问题查代码、查抓包、查日志全部都查不出来。 因为你的代码完全没毛病,是 IP 本身在外面「名声不好」。

怎么排查?

把你的服务器出口 IP(或者用户反馈有问题的 IP)丢进 IP 信誉查询,看看:

  • 是否在主流黑名单里
  • 风险评分是多少
  • 是否被识别为代理/VPN/Tor
  • 是否被分类为机房 IP(机房 IP 在很多场景下是被歧视的)

如果发现 IP 已经被「污名化」了,最快的解决方法就是换 IP。这一步省下来的排查时间,可能比你优化首屏还多。

推荐工具:IP 信誉查询,聚合多个威胁情报源,一眼看出 IP 的「江湖名声」。


七、实战串联:用这套方法 5 分钟定位一个真实问题

讲了这么多理论,来一个我前阵子真实排过的 case 串一下。

背景:一个电商客户反馈,部分用户进入商品详情页会卡 5~10 秒才出来,但后台监控显示接口响应都在 200ms 以内。

按这套方法走了一遍:

第一步 DNS:多地查询,所有节点解析到的都是 CDN 的 IP,正常 ✅

第二步 Ping:从全国 20 个节点持续 Ping 这个 CDN IP,发现广东电信节点丢包率 8%,延迟抖动 ±150ms,其他节点正常。问题缩小到广东电信用户。

第三步 路由追踪:从广东电信发起 MTR,发现数据包在某个省级骨干节点的 Hop 出现持续丢包——典型的链路拥塞。

第四步 HTTP 测速:用广东电信节点测,TTFB 飙到 4 秒。但同一时刻其他地区 TTFB 都在 100ms 以内。证实就是这条链路的问题。

第五步 IP 信誉:顺手查了下 CDN IP 的信誉,干净的,排除被风控拦截的可能。

结论:CDN 厂商在广东电信的 PoP 节点出现链路异常。截图甩给 CDN 厂商工单,2 小时后他们切换了一个出口路由,问题解决。

整个排查从开始到定位,大约 5 分钟。

如果不是按这套分层方法走,光让前端去翻代码,估计加班到凌晨也找不出来。


八、写在最后:把这套方法和工具收藏起来

总结一下这套「五步分层排查法」:

  1. DNS 层 → 域名解析对了吗?多地解析一致吗?
  2. 链路层 → Ping 通吗?延迟抖动正常吗?路由有没有绕路?
  3. 端口层 → TCP 端口能握手吗?防火墙/安全组放行了吗?
  4. HTTP 层 → DNS / TCP / TLS / TTFB 哪一段最慢?
  5. IP 信誉层 → 出口 IP 在黑名单上吗?被风控了吗?

这五步的顺序很重要——从下往上,从基础设施到应用层。下层不通的时候去优化上层,等于在沙地上盖楼。

我用的这一整套工具都在 BiuPing 这个站点,免费、不用注册、支持 IPv4/IPv6 双栈,对前端和运维同学都挺友好。


如果这篇文章帮你节省了下次排障的时间,欢迎点赞收藏。也欢迎在评论区分享你踩过的网络问题坑——大家一起避雷 🚀