我正在制作一个经常进行API调用的Web应用程序。所有API调用都只是简单的GET请求,但我希望尽可能地加快加载时间和输出返回时间。截至目前,我正在使用cURL通过以下方式进行API调用:
<?php
function api_call($params)
{
$base = 'https://api.example.com/Api?';
$url = $base . http_build_query( $params );
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
return json_decode($output,true);
}
?>
有没有什么方法可以优化它以加快下载和/或输出时间?
答案 0 :(得分:8)
是否可以使用IP地址而不是主机名api.example.com?如果是,你可以加速namelookup_delay(在我的情况下几百毫秒)
保持活动对您的情况没有帮助,因为保持活动不会在请求之间建立池连接。它在经典的webbrowser-webserver场景中很有用。
答案 1 :(得分:6)
如果许多API调用之间的数据有时相同,有没有办法可以使用缓存?它更多的是连接速度问题,而不是代码问题。
答案 2 :(得分:4)
不是真的。代码的速度在那里不能真正优化。瓶颈将是您的服务器与其服务器之间的连接。你无法在代码中加快速度。
答案 3 :(得分:2)
您可以做的另一件事是 启用编码,因为它可以传输更少的数据。
curl_setopt($ch, CURLOPT_ENCODING, '');//set gzip, deflate or keep empty for server to detect and set supported encoding.
如果启用编码,则数据将在发送之前进行压缩。 这可能需要一些时间,但如果您处理大数据,则会传输更少的数据。
答案 4 :(得分:0)
优化
<?php
function api_call($params)
{
$url='https://api.example.com/Api?'.http_build_query($params);
return json_decode(file_get_contents($url),true);
}
?>
你也可以:
$url
变量并将字符串粘贴到file_get_contents()
。$params
未更改,则您还可以删除http_build_query();
并将其结果保存一次到该变量。答案 5 :(得分:-1)
如果请求是针对同一台服务器,那么您可以做的一件事就是使用keepalive连接。
答案 6 :(得分:-1)
您可以使用多线程来启动脚本的更多副本。它可以更快地执行您的请求