IE11 XMLHttpRequest的性能确实很慢

时间:2016-10-18 14:36:44

标签: javascript angularjs performance internet-explorer-11 angular-material

我有一个角色素材SPA网站,在Chrome,Firefox和Edge中表现非常出色,但它在IE11中大幅落后。

我知道IE11中动画和样式的角度材质问题,并进行了一些更改以改善该区域的一般性能(禁用动画,甚至删除主题等等。)

但是,即使这稍微改善了应用程序,我仍然可以在加载资源时看到一个大的滞后,每个请求花费很长时间(非常长的时间)来处理。我检查了服务器,响应总是在毫秒范围内(就像在Chrome中一样),但它在IE11中需要永远。

请检查IE11的加载网络时间。

enter image description here

vs Chrome。

enter image description here

可能导致这种情况的任何想法?

干杯,

8 个答案:

答案 0 :(得分:0)

我在IE中遇到了与AngularJS类似的问题 我们已将问题跟踪到IE的安全更新(KB2962872)。 卸载该补丁可使性能恢复正常。

答案 1 :(得分:0)

您可能调查XMLHttpRequest被拦截。尽管现代浏览器对此的性能影响较小,但IE与JS函数交换本机调用会在一定程度上影响其使用范围。这适用于各种polyfill和扩展功能。

答案 2 :(得分:0)

根据您的屏幕截图,“ CORS Preflight”请求似乎有一个瓶颈……。也许https://developer.akamai.com/blog/2015/08/17/performance-single-page-apps会为您说明可行的解决方法。

此外,我将研究为什么您的应用程序发出大量的OPTION请求,除非有此意图,否则您的应用程序会进行多次往返,每一次都会延迟一次往返,并且并发连接受到限制,最终您会消耗合并并阻止其他请求...

通过IE的“网络”标签查看网络上正在发生的事情会很有趣...

答案 3 :(得分:0)

这似乎是XMLHttpRequest正在排队,然后成批执行,实际上使每个请求都停滞不前,直到某个内部进程一次将它们全部发送出去。

我首先要研究的是IE对于一次允许的并发XMLHttpRequest和浏览器请求有内部限制(记录不充分)。在较早的版本中,该值为2,但在IE8周围增加到6,具体取决于有关IE认为您网络的速度的一些糟糕且不可靠的内部指标。 IE11仍然可以这样做,但是有更高的限制。

我的猜测是您已达到此限制,一旦达到此限制,在将IE发送给服务器之前,管理IE中批次的内部计时器检查将花费1-2s。

要检验此假设,请执行以下操作:在IE11中,在发送每个请求之前,只需添加100ms等待(它只需要足以限制并行请求的数量)即可。仍然会很慢,但是如果内部批处理是原因,您将不会在请求的块中看到1-2s的延迟。

如果这是问题所在,则解决方法可能是分批尝试尝试避免达到IE的上限,但是由于这是动态的,我怀疑这对<1.5%的用户而言将是不成比例的痛苦。

答案 4 :(得分:0)

我会将REAL OS调试器附加到浏览器,然后尝试确定IE是否实际上正在分离线程来执行XHR。 这是一项艰巨的调查,但可以解释很多问题。

大多数浏览器都执行然后将回调和数据封送回MAIN UI THREAD。 但是IE较旧,我不知道它的作用。

另一个想法。 我们行动缓慢的LARGE公司最终放弃了对IE的支持,这使我们能够编写具有体面代码的承诺而无需使用polyfill。 我们的代码库正在慢慢清理随着时间的推移而获得的其他奇怪的polyfill。 在最长的时间内,我们无法写出(var key in something),因为列表中会出现一个polylfill。

您可能会考虑与客户进行讨论。 它以“ Edge或Firefox怎么样”开头 您可以谈论其他事情被取代。 您刷新手机和笔记本电脑...浏览器如何...

祝你好运。

答案 5 :(得分:0)

Chrome中的5-6毫秒时间似乎太短,无法进行实际的服务器调用。如果我们在两个屏幕快照中都看到了相同的网络调用(目前尚不清楚),那么Chrome很有可能正在使用缓存响应,而IE正在进行网络调用。请检查您的缓存标题,并确保您使用的是IE可以理解的标题。

答案 6 :(得分:0)

此问题起源于Internet Explorer浏览器对AJAX请求的配置。

执行以下本地更改:

进行如下本地政策更改:

导航到Windows组件> Internet Explorer>安全功能> AJAX 启用“允许本机XMLHTTP支持”。 将“每个主机的最大连接数(HTTP1.1)”更改为16。 将“每个服务器的最大连接数(HTTP1.0)”更改为16。

除此之外,大多数公司都放弃了对IE的支持。没有人愿意为没人使用的东西编写polyfill,为什么要使用IE?请回复我想知道的内容。

答案 7 :(得分:0)

您可以使用Microsoft ETL日志来更深入地跟踪HTTP网络

  • 创建文件夹C:\ msfiles

  • 打开一个管理员提升的cmd

  • 发出命令netsh trace start InternetClient_dbg capture =是maxsize = 450 filemode =循环持久=是覆盖=是traceFile = C:\ msfiles \ Etl_trace.etl

  • 执行所需的操作,这是实际的网络问题

  • 使用命令netsh trace stop停止跟踪

->您现在有了Etl_trace.etl

使用IE一次,使用Chrome一次 并比较日志...