2010-12-06 119 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. 

如果啓用編碼,則數據在發送之前會被壓縮。 這可能需要一些時間才能完成,但如果您處理大量數據,則數據傳輸的數量會非常少。