在我的应用中,我有一个包含许多指令的页面。一些指令执行HTTP请求。加载页面时,对服务器的所有请求几乎同时执行。在我看来,角度$ http服务在组中执行请求,并且在一个组中的所有请求都被解析之前,它不会继续到下一个组。 为了检查这个,我添加了一个简单的HTTP拦截器,如下所示:
if (localStorage.getItem("EnableLogs") != null) {
angular.module('cnsApp').factory('logTimeTaken', [function() {
return {
request:(config) => {
config.requestTimestamp = new Date().getTime();
return config;
},
response:(response) => {
response.config.responseTimestamp = new Date().getTime();
console.log({config: response.config.url, duration: response.config.responseTimestamp - response.config.requestTimestamp});
return response;
}
};
}]);
angular.module('cnsApp').config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push('logTimeTaken');
}]);
}

在我的C#服务器中,我记录了每个函数从调用它到完成时的时间。我发现日志之间存在巨大差异。
虽然客户端日志显示对" IsSuper"的请求。耗时4604ms,服务器显示执行路由功能需要19ms(对于大多数请求也是如此)
对此事的任何见解都将非常感激。
答案 0 :(得分:0)
分组请求听起来不像有角度的东西。您可以通过单个请求和时间来测试它。
您可能正在从服务器传输大响应,在这种情况下,角度将在转换响应时卡住。
尝试覆盖转换消息并记录并查看它是否能够快速到达。如果确实如此,尝试做一个最小变换来测试这个理论。
{function(data, headersGetter, status)|Array.<function(data, headersGetter, status)>}
答案 1 :(得分:0)
你可以在这里看到http://jsfiddle.net/U3pVM/42955/
console.log("RECORDED TIME ", config)
此行输出证明,角度不会对您的请求进行分组,它只是有点&#34;射击&#34;它们几乎与指令一个接一个地创建的毫秒相同。 虽然它一个接一个地处理响应(js是单线程的),因此会有增量延迟。
无论如何,您使用angular计算的持续时间是服务器处理时间+发送和获取消息所需的延迟。无论如何,它不应该与服务器处理时间相同。
很难说出角度如何处理您的请求,但如果您真的想知道从服务器获取响应需要多少,您可以查看Network
标签。