我在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處理代碼的開始之間。
任何人都知道如何解決導致延遲的原因?我應該在哪裏尋求縮小這個範圍?
我沒有針對您的問題的解決方案,但只是建議,請使用'console.time(「friends/map endpoint」)'&'console.timeEnd(「friends/map endpoint」)'來幫助與故障排除。這將記錄一次到你的控制檯的請求。只是一個整潔的小功能,享受你的挫折調試繼續。 :) – EnigmaRM
感謝@EnigmaRM,我不認爲console.time(和console.error等)在Phonegap中工作,但是對於Web工作來說是一個很好的提示。我會仔細檢查,雖然 –
我不知道它是否是個好主意,但我會嘗試發送一個「普通」XHR(消除'$ http'),以查看問題是否與'$ http'相關內部請求預處理(轉換等)。順便說一下,'hashes.values'類型(在這兩種情況下)是什麼? – gkalpak