【发布时间】:2014-02-15 19:53:21
【问题描述】:
控制器有 $http 调用 Flask 上的 api 后端。我有一些基本的身份验证并设置了跨域。第一次进入 cpuListCtrl 控制器时,$http 调用需要 cca。约 14 秒。下次我以角度访问控制器时,只需 23 毫秒。但每次我按下浏览器刷新,回到〜14秒。来自浏览器的直接 api 调用也只需要 23 毫秒。所以我的问题是我需要这么长时间吗,我错过了什么,或者我应该在哪里看?
编辑:更新代码以反映最近的更改:
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 日志,看看它花费了多少时间。
-
chrome 工具显示它的等待时间很长,烧瓶日志仅在最后几毫秒注册对他的调用,我感觉 $http 等待并在一段时间后执行......我实现了它与 $resource 是一样的。
-
这可能与 webapi 预热有关,请查看:weblog.west-wind.com/posts/2012/Sep/04/…
-
不,运行Flask自带的默认服务器,如果我将直接api调用放入浏览器,需要23ms才能完成。
-
烧瓶服务器在heroku上吗?
标签: javascript angularjs http