控制器有$ 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)
可能有一百万件事情,我们没有足够的信息来回答。您应该查看Chrome开发人员工具和后端API日志以了解请求,并查看它花费的时间。 –
铬工具显示它的等待时间很长,烧瓶日志只在最后几毫秒注册到他的调用,我有一种感觉,$ http等待,并在一段时间后执行......我用$资源实现它,它是一样。 – zPrima
这可能与webapi热身检查有关: http://weblog.west-wind.com/posts/2012/Sep/04/ASPNET-Frameworks-and-Raw-Throughput-Performance – Dalorzo