AngularJS - 使用$ http发送许多请求真的很慢

时间:2018-03-26 14:25:26

标签: javascript angularjs

在我的应用中,我有一个包含许多指令的页面。一些指令执行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#服务器中,我记录了每个函数从调用它到完成时的时间。我发现日志之间存在巨大差异。

在客户端中,日志看起来像这样: enter image description here

虽然客户端日志显示对" IsSuper"的请求。耗时4604ms,服务器显示执行路由功能需要19ms(对于大多数请求也是如此)

对此事的任何见解都将非常感激。

2 个答案:

答案 0 :(得分:0)

分组请求听起来不像有角度的东西。您可以通过单个请求和时间来测试它。

您可能正在从服务器传输大响应,在这种情况下,角度将在转换响应时卡住。

尝试覆盖转换消息并记录并查看它是否能够快速到达。如果确实如此,尝试做一个最小变换来测试这个理论。

{function(data, headersGetter, status)|Array.<function(data, headersGetter, status)>}

https://docs.angularjs.org/api/ng/service/$http#usage

答案 1 :(得分:0)

你可以在这里看到http://jsfiddle.net/U3pVM/42955/

console.log("RECORDED TIME ", config)

此行输出证明,角度不会对您的请求进行分组,它只是有点&#34;射击&#34;它们几乎与指令一个接一个地创建的毫秒相同。 虽然它一个接一个地处理响应(js是单线程的),因此会有增量延迟。

无论如何,您使用angular计算的持续时间是服务器处理时间+发送和获取消息所需的延迟。无论如何,它不应该与服务器处理时间相同。

很难说出角度如何处理您的请求,但如果您真的想知道从服务器获取响应需要多少,您可以查看Network标签。