Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过从cURL_getinfo()获取详细信息来计时cURL请求_Php_Performance_Curl_Time - Fatal编程技术网

Php 通过从cURL_getinfo()获取详细信息来计时cURL请求

Php 通过从cURL_getinfo()获取详细信息来计时cURL请求,php,performance,curl,time,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 使用的代码

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

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);
我不太明白上面的结果

  • 为什么第一个字节的时间(TTFB)等于总时间
  • 上述时间是累积的吗?如果是,传输时间是否等于0毫秒
  • 转移前时间是什么意思
  • curl\u getinfo($ch)
    的输出:


    不要花时间对请求进行任何彻底的分析<代码>0毫秒和
    0.5毫秒
    是计算机的年龄间隔;阅读原始数字以避免混淆

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

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

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

    • 为什么第一个字节的时间(TTFB)等于总时间
    这取决于总数据。如果传输的总数据几乎为零,那么它将是相等的

    • 上述时间是累积的吗?如果是,传输时间是否等于0毫秒
    是的,它是累积的。如果数据很大,那么它就会增加

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

    有关

    这还取决于你的连接速度

    您还应该检查这些值

  • CURLINFO\u大小\u上载-上载的总字节数
  • CURLINFO\u SIZE\u DOWNLOAD-下载的总字节数
  • CURLINFO\u速度\u下载-平均下载速度
  • CURLINFO\u速度\u上传-平均上传速度
  • 因此,您将了解您的速度和数据大小

    更新:


    通过您更新的输出,我们可以清楚地了解到几乎没有上传和下载数据。因此,计时现在更有意义了。

    那么,您的代码中到底在哪里使用了
    curl\u getinfo()
    。我在复制和粘贴过程中遗漏了一行。编辑了问题。谢谢你的回复。然而,我的站点包含图像、外部CSS和JS&大量文本。卷曲信息也能获得这些的加载时间吗?这是否可以被视为“数据量相当大”?因为您只请求了一个资源,即使网页上列出了其他资源,也没有调用它们。在发送第一个字节的同时返回给客户端的所有文本/html。如果只是为了测试而让HTML变得更长,那么TTFB将开始与总时间不同。cURL是否有可能包含站点中的所有内容(CSS、JS、图像等)?或者我必须选择另一种解决方案,比如PhantomJS/CasperJS?它本身不能。如果您继续使用curl,您将不得不在后续调用中获取这些资源如果您使用
    curl\u getinfo()
    的完整输出编辑您的问题,这可能会使答案更具体,讨论更有趣,因为如果没有舍入,您将已经注意到差异;即使可以忽略,但总数据至少有1KB,这可能无法在0毫秒内完成传输(总时间-TTFB)@Raptor:检查更新的答案并用更新的数据更新您的问题
    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
    )