【发布时间】: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