javascript - XMLHttpRequest 仅在 Internet Explorer 中花费很长时间

标签 javascript ajax performance internet-explorer xmlhttprequest

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

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

Long Start Time

请注意,此请求在 Google Chrome 中完全没有问题,只需要 200 毫秒:

Quick in Chrome

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

Empty Request

并且响应很小:

enter image description here

我认为由于问题似乎出在客户端,我们的脚本一定有问题,但我们对所有 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 进行测试。

最佳答案

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

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

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

关于javascript - XMLHttpRequest 仅在 Internet Explorer 中花费很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57575774/

相关文章:

javascript - 如何在 Blogger 上嵌入第 3 方小部件

javascript - 你怎么知道一个 HTML 元素是否有一个带有纯 Javascript 的特定类?

ajax - MarkLogic HTTP 服务器 : Set up CORS headers

java - 对 java if else 性能感到困惑

javascript - 免费的 JavaScript 混淆器?

javascript - 如何在不创建实例的情况下获取类扩展的第一个类

javascript - 在 jquery ajax 调用中使用 setInterval 的最佳方式是什么?

javascript - 使用 ajax 和 PHP 根据第一个选择框填充第二个选择框

matlab - 找到两个 Matlab 矩阵之间的相等行

c++ - parallel_for 中互斥体的多线程替代方案