2014-05-11 46 views
2

我在AngularJS中使用http服務向我的PHP API發出請求。這是一個Phonegap iOS應用程序,使用AngularJS作爲主要框架。AngularJS將HTTP POST延遲到PHP

在一次調用中,我使用Facebook Javascript API獲取用戶的好友列表,將其編碼並將其發送到我的API,將電子郵件匹配到我們的應用用戶列表,然後將數據發送回到應用程序。

我用手機上的聯繫人完全一樣,我使用Phonegap進行訪問。

使用console.log()我已經證實,從設備加載接觸Facebook上的朋友數據取不到一秒。

問題是通過API映射Facebook朋友列表需要大約20秒,但聯繫人只需要大約2秒。

我已經手動強制facebook列表爲空,var friends = [],並且該過程幾乎是即時的,但是如果我發送1或300個Facebook聯繫人,它會變得非常慢。

我已經通過處理硬編碼數據來檢查實時服務器上的代碼,大約需要0.01秒(所以沒有HTTP POST,只是PHP邏輯)。

我也放在console.log()命令http.post()之前和成功函數中:

console.log('http.post started'); 

$http.post(
    $rootScope.api_url + '/friends/map/', 
    {values: hashes.values}, 
).success(function(data,status,headers,config){ 

    console.log('http.post finished'); 

    // process data 

}).error(function(data,status,headers,config){ 
    // log error 
}); 

而且除了所用PHP error_log當PHP處理開始時告訴我,只是之前結果返回:

<?php 
// includes 
require_once("../../../configs/config.".get_current_user().".php"); 

function process_request() { 

    error_log('started processing'); 

    // decode POST data, work out API method etc 

    $return_data = $caseObject->process_data($method, $arr_rest_data, $arr_req_data, $extra_data); 

    error_log('data processed'); 

    return $return_data; 

} 

echo GibberishAES::enc(json_encode(process_request()), IOS_API_PASSPHRASE); 

?> 

所以這給了我日誌中的JavaScript發送數據前,PHP處理它之前和之後和JavaScript收到響應後。

看着日誌中獲取的輸出,20年代延遲以下之間:

​​

所以延遲似乎是在上傳。沒有數據被AES解碼,我已經檢查過,facebook數據是一個長度爲17k字符的編碼字符串,聯繫人數據長度爲22k字符。所以這不是帖子的大小,至少我不這麼認爲。總結一下,我在AngualrJS中得到了一個約爲20s的http.post請求,與另一個約需要2s的請求非常相似,PHP代碼本身在1秒內執行,並且延遲似乎是在調用javascript http.post開始和php處理代碼的開始之間。

任何人都知道如何解決導致延遲的原因?我應該在哪裏尋求縮小這個範圍?

+1

我沒有針對您的問題的解決方案,但只是建議,請使用'console.time(「friends/map endpoint」)'&'console.timeEnd(「friends/map endpoint」)'來幫助與故障排除。這將記錄一次到你的控制檯的請求。只是一個整潔的小功能,享受你的挫折調試繼續。 :) – EnigmaRM

+0

感謝@EnigmaRM,我不認爲console.time(和console.error等)在Phonegap中工作,但是對於Web工作來說是一個很好的提示。我會仔細檢查,雖然 –

+1

我不知道它是否是個好主意,但我會嘗試發送一個「普通」XHR(消除'$ http'),以查看問題是否與'$ http'相關內部請求預處理(轉換等)。順便說一下,'hashes.values'類型(在這兩種情況下)是什麼? – gkalpak

回答

1

對於任何一個類似的問題在這裏登陸:

延遲似乎與$http的要求預處理和內部處理有關。
使用「普通舊式」XHR(取消$http)可以大大加快速度(當然,以功能喪失和角度集成爲代價)。