返回目录

用 curl 拆解一次网页请求的耗时

离线文本版 · Markdown 标记与示例按原文保留。

网站变慢时,一个总耗时数字不能说明问题。DNS、连接、TLS、服务端处理与下载,都可能成为瓶颈。curl 的时间字段可以帮助建立最初的判断。

<!-- more -->

## 先理解这些时间是累计值

time_namelookup 表示域名解析完成的时间;time_connect 表示 TCP 连接建立完成;time_appconnect 常用于 HTTPS 握手完成。它们通常从请求开始累计,不能把几个值直接相加当作总耗时。连接复用和重定向会影响解释。

## 区分首字节与总时间

time_starttransfer 代表开始收到响应的时间,总时间还包括接收响应正文。首字节慢可能涉及服务端、网络往返、握手或代理排队,不应立刻认定数据库慢。总时间长而首字节快,可以进一步检查文件体积和传输速度。

## 对照测试比单次结果有用

在相近时间重复几次,分别测试静态小文件和实际页面。必要时区分 IPv4 与 IPv6。不要用跳过证书校验来隐藏 TLS 故障;也不要对不属于自己的站点进行高频压测。

## 把结果写成可比较的记录

保留测试位置、时间、目标 URL、状态码和是否经过代理。一次测试可能命中缓存,另一次可能走回源,因此需要结合响应头判断。网络计时是线索,最终仍需服务器日志、应用指标或抓包提供证据。

## 操作参考

```text
curl -sS -o /dev/null -w "dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} first_byte=%{time_starttransfer} total=%{time_total} status=%{http_code}\n" https://example.com/
```

示例中的域名、文件名和地址需按实际环境替换。涉及生产配置时,先保留可恢复副本,再做修改。

## 参考资料

- [官方文档与技术说明](https://everything.curl.dev/usingcurl/verbose/writeout.html)
- [在线工具箱](/tools/) · [项目下载](/downloads/)