CURL解析主机比普通的file_get_contents慢得多

时间:2016-10-31 08:55:26

标签: php curl php-curl

我在localhost上通过URL获取服务响应。使用CURL并使用" localhost"作为域名,第一个请求大约需要150ms,第二个请求需要2ms。使用IP而不是" localhost"两个CURL请求都需要2ms。使用file_get_contents时,无论是否为#local;" localhost"或IP。

甚至对于本地主机,会导致这种延迟的原因是什么?

这是测试代码:

$instance['port'] = 8192;
$instance['hostname' ] = 'localhost';
//$instance['hostname' ] = '127.0.0.1';


/* file_get_contents */
$time = microtime(true);
$response = file_get_contents('http://'.$instance['hostname' ].':'.$instance['port'].'/file1.txt');
$queryTime = microtime(true) - $time;
echo "file_get_contents time: ".$queryTime."<br>";

$time = microtime(true);
$response = file_get_contents('http://'.$instance['hostname' ].':'.$instance['port'].'/file2.txt');
$queryTime = microtime(true) - $time;
echo "file_get_contents time: ".$queryTime."<br><br>";


/* CURL */
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://'.$instance['hostname' ].':'.$instance['port'].'/file1.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$time = microtime(true);    
curl_exec($ch);
$queryTime = microtime(true) - $time;
echo "CURL time: ".$queryTime."<br>";


curl_setopt($ch, CURLOPT_URL, 'http://'.$instance['hostname' ].':'.$instance['port'].'/file2.txt');
$time = microtime(true);    
curl_exec($ch);
$queryTime = microtime(true) - $time;
echo "CURL time: ".$queryTime."<br><br>";
curl_close($ch);

响应:

file_get_contents time: 0.0029559135437012
file_get_contents time: 0.0030159950256348

CURL time: 0.15396809577942
CURL time: 0.002269983291626

使用IP而不是localhost时,响应如下:

file_get_contents time: 0.0025560855865479
file_get_contents time: 0.0034060478210449

CURL time: 0.0026850700378418
CURL time: 0.0027031898498535

2 个答案:

答案 0 :(得分:0)

如上所述here,这可能是DNS查找问题。您是否尝试将localhost添加到etc / hosts文件中?

This answer还建议编辑hhtpd.conf可能对您有帮助。

答案 1 :(得分:0)

我尝试了你的脚本,它运行正常。第一次卷曲调用慢一点。我猜测但是检查你是否有IPv6活动,哪个localhost转换成。

尝试停用。