2010-12-06 74 views
1

我正在制作一个经常进行API调用的Web应用程序。所有的API调用都只是简单的GET请求,但是我希望尽可能加快加载时间和输出返回时间。截至目前,我使用的卷曲做通过API调用如下:为速度优化cURL

<?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); 
    } 
?> 

有没有办法,我可以优化这个更快的下载和/或输出时间任何方式?

回答

-1

你可能做的一件事是看看如果请求是在同一台服务器上使用keepalive连接。

+0

是的,调用是对同一个服务器,只是输出中具有不同的参数和不同的返回值。保持活力对此会有好处吗?如果是这样的话,我应该如何保持API服务器和我的cURL之间的连接更长久。 – lolmoney 2010-12-06 19:11:08

+4

-1 php curl自动使用keepalive。 http://stackoverflow.com/questions/972925/persistent-keepalive-http-with-the-php-curl-library – 2010-12-06 19:14:39

+0

@Whitlock你真的很难得到downvoting的人吗?我真的不认为这是一个非常糟糕的答案。也许他不知道更好。我认为泰勒正在帮助lolmoney? – Alfred 2010-12-06 21:38:18

4

不是。代码的速度无法真正在那里得到很好的优化。瓶颈将成为您的服务器与其服务器之间的连接。你不能在代码中加快速度。

-1

您可以使用多线程来启动脚本的更多副本。它可以更快地执行您的请求

6

如果数据在许多API调用之间有时相同,有没有什么办法可以使用缓存?与代码问题相比,它更像是连接速度问题。

7

是否可以使用IP地址而不是主机名api.example.com?如果是的话,你可以加快namelookup_delay(在我的情况下几百毫秒)

保持活动不会帮助你的情况,因为保持活动不会请求之间的连接池。它在经典的webbrowser-webserver场景中很有用。

0

优化:

<?php 
    function api_call($params) 
    { 
     $url='https://api.example.com/Api?'.http_build_query($params); 
     return json_decode(file_get_contents($url),true); 
    } 
?> 

你还可以:

  1. 取出$url变量并粘贴到file_get_contents()的字符串。
  2. 如果$params未更改,那么您也可以删除http_build_query();并将其结果保存到变量一次。
2

您可以做的还有一件事是 启用编码,因为它可以减少要传输的数据量。

curl_setopt($ch, CURLOPT_ENCODING, '');//set gzip, deflate or keep empty for server to detect and set supported encoding. 

如果启用编码,则数据在发送之前会被压缩。 这可能需要一些时间才能完成,但如果您处理大量数据,则数据传输的数量会非常少。