控制器有$ http,可以在Flask上调用api后端。我有一些基本的身份验证和crossdomain设置。第一次进入cpuListCtrl控制器时,$ http调用需要cca。 〜14sec。下次我以角度访问控制器时只需要23ms。但每次按下浏览器刷新,回到~14秒。来自浏览器的直接api调用也只需要23ms。所以我的问题是我需要这么长时间,我是否会错过一些东西,或者我应该具体看哪一个?
编辑:更新了代码以反映最近的更改:
var app = angular.module('RecycleApp', ['ngRoute', 'appControllers']);
app.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}
]);
app.config(['$routeProvider', function($routeProvider){
$routeProvider
.when("/cpu", {
templateUrl:'static/js/partials/cpu.html',
controller:'cpuCtrl'
})
}]);
var appControllers = angular.module('appControllers', []);
appControllers.controller('cpuCtrl', ['$scope','$http',
function($scope,$http){
$http({
url: 'http://SOME_IP/api/v1/cpus',
method: 'POST',
data: JSON.stringify({"latitude":46.1948436, "longitude":15.2000873}),
headers: {"Content-Type":"application/json"}
})
.success(function(data,status,headers,config){
console.log(data.list);
$scope.cpus = data.list;
})
.error(function(data,status,headers,config){
console.log("something went wrong.");
})
}]);
服务器端:
@app.route('/api/v1/cpus', methods=["GET"])
@cross_origin(origins='*', headers=("Content-Type"))
def get_cpu_list():
result = session.query(RecycleReUseCenter)\
.options(load_only("Id", "CpuName"))\
.all()
return list_json(result)
@app.route("/api/v1/cpus", methods=["POST"])
@cross_origin(origins='*', headers=("Content-Type"))
def get_cpu_list_with_locations():
content = request.get_json(force=True)
given_latitude = content['latitude']
given_longitude = content['longitude']
result = RecycleReUseCenter.get_all_with_distance(given_latitude, given_longitude)
return list_json(result)
答案 0 :(得分:0)
您确定http呼叫何时开始?角度应用程序可能会卡在其他位置,并且仅在最后一秒内进入http调用。例如 - 在配置中,您使用的是“令牌”,您从哪里获取它?在许多有角度的应用程序中,这是从一些oauth服务中提取的,在一个单独的调用中。在配置http之前,您的慢速呼叫将无法启动。在令牌出现后,下一次调用会更快,因为我们已经获得了令牌。
为限制某些猜测,您可以使用像charles这样的代理工具 - 或者deflect.io chrome扩展程序来监视所有即将发出的http调用并计算出来
答案 1 :(得分:0)
我最近遇到了同样的问题,发现奇怪的延迟实际上似乎是在Flask端,但只有在使用Chrome中运行的Angular应用时才会发生。来自python stackexchange论坛的答案是我见过的最好的答案 - https://stackoverflow.com/a/25835028/1521331 - 它提供了一个解决方案'如果不是对这个谜的解释,那就是各种各样!
答案 2 :(得分:0)
我遇到了同样的问题,以上都没有为我工作。这是做了什么:
Slow Requests on Local Flask Server
实际上,某些浏览器会尝试在IPv4之前访问IPv6套接字。在注释掉/ etc / hosts中的违规行并重新启动apache之后,问题就解决了。