AngularJS将HTTP POST延迟到PHP

AngularJS将HTTP POST延迟到PHP,php,angularjs,post,cordova,Php,Angularjs,Post,Cordova,我正在使用AngularJS中的http服务向我的PHP API发出请求。这是一款Phonegap iOS应用程序,使用AngularJS作为主要框架 在一次调用中,我使用Facebook Javascript API获取用户的好友列表,对其进行编码并将其发送到我的API,将电子邮件与我们的应用程序用户列表进行匹配,然后将数据发送回应用程序 我对手机上的联系人做了完全相同的事情,我使用Phonegap访问这些联系人 使用console.log()我已经确认从设备加载联系人和facebook好友数

我正在使用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()之前,并在success函数期间:

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\u 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 );

?>
因此,延迟似乎出现在上传过程中。到那时为止,还没有数据被AES解码,我已经检查过,facebook数据是一个大约17k个字符长的编码字符串,联系人数据是22k个字符长。所以这不是帖子的大小,至少我不这么认为

总之,我得到了一个AngualrJS中的http.post请求,大约需要20秒,与另一个大约需要2秒的请求非常相似,PHP代码本身在1秒内执行,延迟似乎介于javascript
http.post
调用开始和PHP处理代码开始之间


有人知道我如何找出造成延误的原因吗?我应该在哪里缩小范围呢?

对于在这里遇到类似问题的人:

延迟似乎与
$http
的请求预处理和内部处理有关。

使用“普通的旧”XHR(消除
$http
)可以大大加快速度(当然,这是以失去功能和角度集成为代价的)。

我没有解决您的问题的方法,但建议您使用
console.time(“好友/地图端点”)
console.timeEnd(“好友/地图端点”)
以帮助排除故障。这将在控制台上记录该请求的时间。只是一个简单的小功能,让您在调试过程中继续享受。:)谢谢@Enigram,我认为console.time(和console.error等)在Phonegap中不起作用,但这是一个很好的网络工作提示。虽然我不知道这是否是一个好主意,但我会再次检查,但我会尝试发送一个“正常”的XHR(消除
$http
),看看问题是否与
$http
的内部请求预处理(转换等)有关。顺便问一下,
hashes.values
(两种情况下)的类型是什么?hashes.values由
JSON.stringify()
生成,然后使用
GibberishAES
对其进行编码。我试试XHR好的idea@ExpertSystem切换到XHR修复了它,我考虑过它,但不确定它为什么会工作,但它做到了!所以,谢谢,你应该回答,这样我才能接受,如果你能解释为什么会这样做,请回答!
console.log('http.post started');
error_log('started processing');