【问题标题】:Why is running AJAX queries in parallel much slower than doing serially?为什么并行运行 AJAX 查询比串行运行慢得多?
【发布时间】:2017-08-25 14:43:06
【问题描述】:

我有一个页面,其中 Angular 使用 ng-init 运行一些 ajax 调用来填充页面。页面加载大约需要 1 秒,我觉得这很奇怪,所以我做了一点挖掘。

这是原始代码(减去错误处理)

accountService.roles(null, function (response) {
    $scope.roles = response;
});
masterDataService.getallparties(null, function (response) {
    $scope.parties = response;
});
accountService.users($scope.searchFilter, function (response) {
    $scope.users = response;
});

现在我使用串行调用而不是并行进行了重写:

accountService.roles(null, function (response) {
    $scope.roles = response;
    masterDataService.getallparties(null, function (response) {
        $scope.parties = response;
        accountService.users($scope.searchFilter, function (response) {
            $scope.users = response;
        });
    });
});

瞧,页面现在加载大约需要 100 毫秒。

这是预期的吗?我的服务器(IIS / MVC 4.6)上是否有问题?

编辑:添加截图

【问题讨论】:

  • 服务是否都返回一个回调(分配 $scope.params?)。可能是棱角分明的缘故。您使用的是哪个版本的 Angular?
  • 在这种情况下,它们都使用:$http({ method: 'GET',并且它们都在成功时分配给 $scope.param。我使用的是 angular 1.5.8
  • 这两种情况的页面加载平均时间是否分别为 1 秒(即您是否在每次页面加载时禁用缓存)?
  • 我在每个页面加载时都禁用了缓存45
  • 现代浏览器应该能够同时处理 4-8 个请求(所以我怀疑这只是 IE 的问题)

标签: javascript c# angularjs asp.net-mvc


【解决方案1】:

浏览器限制每个域的同时请求数。对于 Internet Explorer,此值可在注册表中配置,默认设置为 2。请参阅 https://support.microsoft.com/en-us/help/282402/how-do-i-configure-internet-explorer-to-download-more-than-two-files-at-one-time

【讨论】:

  • 为什么并行比串行慢?最坏的情况(每个域只有 1 个请求)应该强制它们进入串行请求
  • 如何使一次 1 个请求比并行请求更快 - 真正的问题,我根本不会质疑你的答案
  • 我知道,我没有解释,我只是觉得值得带这个。
猜你喜欢
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
相关资源
最近更新 更多