我们最近注意到一个问题,即当从 Internet Explorer 导航到我们网站上的公共(public)页面时,该页面会暂时卡住,并显示消息“此网页由于长时间运行的脚本而没有响应”。
经过调查,我发现这是由需要 30 - 45 秒才能完成的 AJAX XMLHttpRequest 引起的。通常,当我们的 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 调试器中单步执行来验证这一点,并删除此行在很大程度上解决了问题。 (事实证明我们不需要这条线,因为相同的逻辑也在另一个地方处理,奇怪的是这并没有导致性能问题。)
关于javascript - XMLHttpRequest 仅在 Internet Explorer 中花费很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57575774/