我正在使用AngularJS中的http
服务向我的PHP API发出请求。它是一个Phonegap iOS应用程序,使用AngularJS作为主要框架。
在一个电话中,我使用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秒延迟在以下之间:
console.log('http.post started');
error_log('started processing');
所以延迟似乎在上传中。此时没有数据被AES解码,我已经检查过,facebook数据是一个长约17k个字符的编码字符串,联系人数据长度为22k个字符。所以这不是帖子的大小,至少我不认为。
总而言之,我在AngualrJS中有一个http.post请求大约需要20秒,非常类似于另一个需要大约2秒的请求,PHP代码本身在1秒内执行,延迟似乎介于两者之间javascript http.post
调用的开始和php处理代码的开始。
任何人都知道如何解决造成延误的原因吗?我应该在哪里缩小范围?
答案 0 :(得分:1)
对于任何以类似问题登陆此处的人:
延迟似乎与$http
的请求预处理和内部处理有关
使用“普通旧”XHR(消除$http
)可以大大加快速度(当然,代价是失去功能和角度集成)。