AngularJS将HTTP POST延迟到PHP

时间:2014-05-11 20:49:36

标签: php angularjs post cordova

我正在使用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处理代码的开始。

任何人都知道如何解决造成延误的原因吗?我应该在哪里缩小范围?

1 个答案:

答案 0 :(得分:1)

对于任何以类似问题登陆此处的人:

延迟似乎与$http的请求预处理和内部处理有关 使用“普通旧”XHR(消除$http)可以大大加快速度(当然,代价是失去功能和角度集成)。