Javascript XMLHttpRequest仅在Internet Explorer中需要很长时间

Javascript XMLHttpRequest仅在Internet Explorer中需要很长时间,javascript,ajax,performance,internet-explorer,xmlhttprequest,Javascript,Ajax,Performance,Internet Explorer,Xmlhttprequest,我们最近注意到一个问题,当从Internet Explorer导航到一个带有消息“此网页由于长时间运行的脚本而没有响应”的公共页面时,我们网站上的一个页面会暂时冻结 经过调查,我发现这是由AJAX XMLHttpRequest引起的,它需要30-45秒才能完成。通常,当我们的AJAX调用出现这样的性能问题时,长时间的等待是在等待服务器响应的过程中。但在这里,创建请求并发送请求的等待时间太长: 请注意,Google Chrome中的此请求完全没有问题,只需200毫秒: 这些结果在每次页面刷新时

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

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

请注意,Google Chrome中的此请求完全没有问题,只需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进行测试。

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

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

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

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

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

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

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