使用 curl 来测试网站的延迟和各个连接阶段的耗时是一个非常高效且专业的做法。通过它的 -w (或 --write-out) 参数,我们可以提取出 DNS 解析、TCP 连接、TLS 握手以及首字节时间(TTFB)等关键指标。

以下是具体的测试方法:

1. 快速单行命令测试

如果你只需要快速查看几个核心指标,可以直接在终端中运行以下命令(将 https://www.example.com 替换为你要测试的网址):

Bash

curl -o /dev/null -s -w "DNS解析: %{time_namelookup}s\nTCP连接: %{time_connect}s\nTLS握手: %{time_appconnect}s\n首字节(TTFB): %{time_starttransfer}s\n总耗时: %{time_total}s\n" https://www.example.com

参数解释:

  • -o /dev/null:丢弃网站返回的页面内容,因为我们只关心时间数据(如果你在 Windows CMD 下运行,请将 /dev/null 改为 NUL)。
  • -s:静默模式(Silent),隐藏下载进度条和错误信息,让输出更整洁。
  • -w:自定义输出格式(Write-out),用于提取并打印我们需要的核心时间变量。

2. 进阶方法:使用配置文件(推荐,输出更美观)

如果你经常需要测试,或者想把输出排版得更易读,可以将格式化配置写进一个文本文件中。

第一步:创建一个名为 curl-format.txt 的文件,将以下内容复制进去并保存:

Plaintext

            请求阶段 | 耗时 (秒)
---------------------|----------------------
      DNS解析 (Namlookup):  %{time_namelookup}\n
       TCP连接 (Connect):  %{time_connect}\n
  TLS握手 (Appconnect):  %{time_appconnect}\n
       准备传输 (Pretransfer):  %{time_pretransfer}\n
        重定向 (Redirect):  %{time_redirect}\n
   首字节时间 (Starttransfer):  %{time_starttransfer}\n
---------------------|----------------------
           总耗时 (Total):  %{time_total}\n

第二步:使用该文件运行 curl 命令

Bash

curl -w "@curl-format.txt" -o /dev/null -s https://www.example.com

3. 核心时间指标全解析

当你拿到测试结果时,这些数据代表了网络请求的不同阶段:

  • time_namelookup (DNS解析时间):从开始请求到 DNS 服务器将域名解析为 IP 地址所花费的时间。如果这个值很高,说明你的 DNS 服务器响应慢。
  • time_connect (TCP连接时间):完成 TCP 三次握手所花费的时间。它反映了你与服务器之间的网络物理延迟(Ping值)。
  • time_appconnect (TLS握手时间):完成 SSL/TLS 证书验证和密钥交换的时间(仅限 HTTPS)。
  • time_pretransfer (准备传输时间):从请求开始到准备发送 HTTP 请求(完成所有网络连接建立)的耗时。
  • time_starttransfer (首字节时间 TTFB):从请求开始到客户端接收到服务器返回的第一个字节的时间。这个指标极其重要,直接反映了服务器后端的处理速度(比如查数据库、生成页面的时间)。
  • time_total (总耗时):从发起请求到整个页面/数据下载完成的总时间。
💡 小贴士:网络波动很正常。为了获得更准确的数据,建议你连续运行几次命令,观察指标的平均情况,而不是仅凭一次的结果下结论。