通过从curl_getinfo()

时间:2016-08-04 07:27:55

标签: php performance curl time

我写了一个小脚本来诊断我网站的连接时间,结果如下:

Lookup time:                0.6454ms
Connect time:               1.1611ms
Pretransfer time:           1.1615ms
Redirect time:              0ms
Time to 1st Byte time:      43.397ms
Total time:                 43.445ms

使用的代码如下:

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if(curl_exec($ch) !== false) {
    $info = curl_getinfo($ch);
    echo 'Lookup time: ' . "\t\t" . ($info['namelookup_time'] * 1000) . 'ms' . PHP_EOL;
    echo 'Connect time: ' . "\t\t" . ($info['connect_time'] * 1000) . 'ms' . PHP_EOL;
    echo 'Pretransfer time: ' . "\t" . ($info['pretransfer_time']) . 'ms' . PHP_EOL;
    echo 'Redirect time: ' . "\t\t" . ($info['redirect_time'] * 1000) . 'ms' . PHP_EOL;
    echo 'Time to 1st Byte time: ' . "\t" . ($info['starttransfer_time'] * 1000) . 'ms' . PHP_EOL;
    echo 'Total time: ' . "\t\t" . ($info['total_time'] * 1000) . 'ms' . PHP_EOL;
} else {
    echo 'Error: ' . curl_error($ch);
}
curl_close($ch);

我不太明白上面的结果。

  1. 为什么第一个字节的时间(TTFB)时间等于总时间?
  2. 以上时间累计?如果是,转移时间等于0ms?
  3. Pretransfer时间是什么意思?
  4. curl_getinfo($ch)的输出:

    Array
    (
        [url] => http://www.example.com/apply.php
        [content_type] => text/html
        [http_code] => 302
        [header_size] => 412
        [request_size] => 88
        [filetime] => -1
        [ssl_verify_result] => 0
        [redirect_count] => 0
        [total_time] => 0.043445
        [namelookup_time] => 0.006454
        [connect_time] => 0.011611
        [pretransfer_time] => 0.011615
        [size_upload] => 0
        [size_download] => 0
        [speed_download] => 0
        [speed_upload] => 0
        [download_content_length] => 0
        [upload_content_length] => 0
        [starttransfer_time] => 0.043397
        [redirect_time] => 0
        [certinfo] => Array
            (
            )
    
        [redirect_url] => http://www.example.com/index.php
    )
    

2 个答案:

答案 0 :(得分:1)

不要,以便对请求进行彻底分析。 0ms0.5ms是计算机之间的年龄;阅读原始数字以避免混淆。

1)如果HTTP请求返回单个资源(而不是完整的网页),则TTFB和总时间都是相同的,除非服务器返回的数据量相当大。

2)是的,这是累积的。增加URL返回的数据量,您将看到传输时间也将从0ms增加

3)在接受请求后等待服务器响应所花费的时间

答案 1 :(得分:0)

  
      
  • 为什么第一个字节的时间(TTFB)时间等于总时间?
  •   

这取决于总数据。如果您传输的总数据几乎为零,则它将是相等的。

  
      
  • 以上时间累计?如果是,转移时间等于0ms?
  •   

是的,这是累积的。如果数据很大,那么它就会增加。

  
      
  • Pretransfer时间是什么意思?
  •   

预转移时间是指从开始到文件传输开始之前的时间(以秒为单位)

有关Curl GetInfo

的更多信息

这还取决于您的连接速度。

您还应该检查此值。

  1. CURLINFO_SIZE_UPLOAD - 上传的总字节数
  2. CURLINFO_SIZE_DOWNLOAD - 已下载的总字节数
  3. CURLINFO_SPEED_DOWNLOAD - 平均下载速度
  4. CURLINFO_SPEED_UPLOAD - 平均上传速度
  5. 因此,您将了解您的速度和数据大小。

    <强>更新

    通过更新后的输出,我们可以清楚地了解到几乎没有上传和下载的数据。所以时间现在变得更有意义了。