Javascript XMLHttpRequest仅在Internet Explorer中需要很长时间
我们最近注意到一个问题,当从Internet Explorer导航到一个带有消息“此网页由于长时间运行的脚本而没有响应”的公共页面时,我们网站上的一个页面会暂时冻结 经过调查,我发现这是由AJAX XMLHttpRequest引起的,它需要30-45秒才能完成。通常,当我们的AJAX调用出现这样的性能问题时,长时间的等待是在等待服务器响应的过程中。但在这里,创建请求并发送请求的等待时间太长: 请注意,Google Chrome中的此请求完全没有问题,只需200毫秒: 这些结果在每次页面刷新时都是一致的。还要注意,这不是一个大请求,也不是一个大响应。请求正文实际上是空的: 而且反应很小: 我认为,由于问题似乎是客户端的,我们的脚本一定有问题,但我们对所有AJAX调用都使用相同的通用函数,其他任何调用都没有问题: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毫秒: 这些结果在每次页面刷新时
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。