【问题标题】:XMLHttpRequest takes very long only in Internet ExplorerXMLHttpRequest 仅在 Internet Explorer 中需要很长时间
【发布时间】:2019-12-25 19:07:35
【问题描述】:

我们最近注意到一个问题,即从 Internet Explorer 导航到我们网站上的一个公共页面时会暂时冻结,并显示消息“此网页由于长时间运行的脚本而没有响应”。

经过调查,我可以看到它是由 AJAX XMLHttpRequest 引起的,需要 30 - 45 秒才能完成。通常当我们的 AJAX 调用出现这样的性能问题时,漫长的等待时间是在等待服务器响应期间。但是在这里,等待创建请求并发送它需要很长时间:

请注意,这个请求在谷歌浏览器中完全没有问题,只需要 200 毫秒:

这些结果在每次页面刷新时都是一致的。另请注意,这不是一个大请求,也不是一个大响应。请求正文实际上是空的:

而且反应很小:

我认为由于问题似乎出在客户端,因此我们的脚本肯定有问题,但我们对所有 AJAX 调用使用相同的通用函数,其他任何事情都没有这个问题:

JSONRequest: function (url, type, data, success, error) {
        var customError = function (er) {
            console.log(er);
        }
        if (error !== 'undefined' && error != null)
            customError = error;
        $.ajax({
            url: url,
            type: type,
            cache: false,
            data: JSON.stringify(data),
            contentType: 'application/json; charset=utf-8',
            success: success,
            error: customError
        });
    },

我在这里很困惑。这仅仅是“避免 IE”的问题,还是我遗漏了什么?创建一个小请求并发送它需要 30 多秒,这似乎太长了,尤其是在 Chrome 中速度很快的时候。什么给了?

*请注意,我正在使用 IE 11 进行测试。

【问题讨论】:

  • 可能是 DNS 查找速度很慢,或者防火墙需要一些时间来检查连接。您是否尝试捕获实际的网络流量并将 IE 与 Chrome 进行比较?
  • 您是否在请求中使用 Type : HEAD ?如果是,则可能是问题的原因。如果可能的话,您可以使用 Type : GET 或 POST 可能有助于解决 IE 的这个问题。 HEAD 请求的 XMLHttpRequest 的状态一直卡在状态 2,直到连接关闭,然后转到 4。

标签: javascript ajax performance internet-explorer xmlhttprequest


【解决方案1】:

由于某种原因,取消选中列表中所有复选框的 JQuery 行导致了问题:

$('.list-check-buttons.check-button.only-button input:checkbox').prop('checked', false)

我通过在 Chrome 调试器中单步执行来验证这一点,并且删除此行在很大程度上解决了这个问题。 (事实证明我们不需要这条线,因为同样的逻辑也在另一个地方处理,奇怪的是没有引起性能问题。)

【讨论】:

    猜你喜欢
    • 2013-09-07
    • 2020-08-26
    • 2014-10-09
    • 2012-11-26
    • 2019-12-27
    • 2017-10-22
    • 2020-11-15
    • 2016-05-19
    • 2011-11-20
    相关资源
    最近更新 更多