控制器有$ 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