2012-08-12 43 views
3

我正在爲客戶端開發基於Web的RESTful API。除了一個請求之外,一切都很好,我需要爲每一行請求Foursquare API。優化性能:許多CURL請求

此請求的URL是:​​3210。

目前到該URL的請求的響應是:

{ 
"response": { 
    "user": { 
     ... some user info ... 
     "times": [ 
      { 
       "id": "8", 
       "venue_fq_id": "4b81eb25f964a52000c430e3", 
       "user_id": "1", 
       "wait_length": "4468", 
       "created_at": "2012-06-09 21:45:43" 
      }, 
      { 
       "id": "9", 
       "venue_fq_id": "4aad285af964a520c05e20e3", 
       "user_id": "1", 
       "wait_length": "8512", 
       "created_at": "2012-06-09 21:45:43" 
      }, 
      { 
       "id": "10", 
       "venue_fq_id": "42377700f964a52024201fe3", 
       "user_id": "1", 
       "wait_length": "29155", 
       "created_at": "2012-06-09 21:45:44" 
      }, 
      { 
       "id": "11", 
       "venue_fq_id": "45c88764f964a5206e421fe3", 
       "user_id": "1", 
       "wait_length": "33841", 
       "created_at": "2012-06-09 21:45:44" 
      }, 
      { 
       "id": "12", 
       "venue_fq_id": "430d0a00f964a5203e271fe3", 
       "user_id": "1", 
       "wait_length": "81739", 
       "created_at": "2012-06-09 21:45:44" 
      } 
     ] 
    } 
}, 
"stat": "ok" 
} 

然而,venue_fq_idresponse.user.times所述陣列中被返回相對於所述四方API的場所。我試着對每行的Foursquare API運行curl請求,但是性能非常慢。請您舉例說明我可以如何加快性能,同時檢索我每次訪問時都要求的F/Q API的相同信息?

這裏是我的代碼:

$query = $this->db->query("SELECT * FROM `wait_times` WHERE `user_id` = ?", array($email_address)); 

$wait_times = $query->result(); 

foreach ($wait_times as $wait_time) { 

    $wait_time->venue = $this->venue_info($wait_time->venue_fq_id); 

} 

function venue_info($fq_id) { 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, "https://api.foursquare.com/v2/venues/4b522afaf964a5200b6d27e3"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    $response = json_decode(curl_exec($ch)); 
    curl_close($ch); 

    return $response['response']['venue']; 

} 

回答

8

你在浪費時間的可怕量實例/拆除捲曲的對象。這可以防止您利用HTTP保持活動,強制curl爲您發出的每個請求啓動一個新的tcp連接。

捲曲手柄CAN被重複使用。例如

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 


function venue_info($fq_id) { 
    global $ch; 
    curl_setopt($ch, CURLOPT_URL, "https://api.foursquare.com/v2/venues/4b522afaf964a5200b6d27e3"); 
    $resp = curl_exec($ch) or die(curl_error($ch)); 
    $json = json_decode($resp); 
    return($json); 
} 
0

Foursquare的API提供了multi端點,讓您最多合併到五個查詢到一個單一的請求。

+0

這需要在不登錄的情況下完成。 – 2012-08-12 19:36:28