首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在IE11中缓慢执行javascript,直到启用开发工具

在IE11中缓慢执行javascript,直到启用开发工具
EN

Stack Overflow用户
提问于 2018-02-02 10:05:12
回答 3查看 9.7K关注 0票数 13

我有一个非常大的javascript应用程序,它主要包含asm.js代码(它构建在urho3d c++引擎之上,即编译成asm.js)。

它在大多数浏览器(chrome、firefox、safari、edge)上运行得很好,但在IE11上运行得非常慢。问题是,只有在打开开发工具之前,它才是缓慢的。随着开发者工具的打开,IE11变得比其他浏览器快10倍,而且速度几乎和其他浏览器一样快。

下面是一个重现此问题的最小示例:

http://test.sebbia.com/urho3d/test.html

在任何工作浏览器中打开页面,"Run“消息和"Run”消息之间的时间应该在1-2秒左右。

在没有开发者工具的情况下在IE11中打开页面,时间应该在35-50秒左右.

打开开发工具并重新加载,时间应该在2-3秒左右.

另一个重要的注意事项是,如果我开始分析开发工具中的会话,性能就会下降,就像关闭开发工具一样。这样我就能实际分析问题了。但是我花了几个小时分析,我尝试在大型函数中插入日志消息,但没有发现瓶颈。所有函数的执行时间大致相同,如果我在一个大函数的中间插入日志消息,它们通常会分成两个类似的部分。因此,没有单一的函数负责放缓,代码执行只是缓慢。位移位、函数调用、算术操作--与开放的开发工具相比,它们似乎都花费了太多的时间。

我真的需要让我的应用程序在IE11上工作,而且它与开放的开发工具一起工作,这让我抓狂。我试图找到一种方法,使IE认为工具是开放的,即使他们不是,或通过任何其他方式取得良好的性能。因此,我的问题是,在打开开发人员工具时,如何才能实现与IE11相同的性能,而无需实际手动打开工具

这是一个非常宽泛的问题,所以我想把它分解成几个小问题:

  1. 有没有办法让IE11认为开发工具是开放的?也许我遗漏了一些像x ua兼容的元标签之类的东西?
  2. 当开发工具关闭时,是什么导致了放缓?我听说console.log函数调用很慢,没有IE8和9上的开发工具,也许IE11上也有类似的东西?也许asm.js没有被优化?如果我知道造成这种情况的原因,我至少可以尝试重写代码以避免这种情况。
  3. 有办法从javascript代码中打开开发工具吗?也许我可以要求用户在网站上按一个按钮,以“使应用程序更快”。要求他们按F12或导航设置似乎太多了。
EN

回答 3

Stack Overflow用户

发布于 2018-02-05 15:55:22

当启用调试器时,asm.js编译将禁用,并且执行将作为常规JS返回执行--在执行开始时,您可以看到沿着这些路线的console.log

边缘的asm.js has been disabled as the script debugger is connected. Disconnect the debugger to enable asm.js.

火狐中的asm.js type error: Disabled by debugger

当你尝试的时候,Chrome根本不会在调试器中打开01_HelloWorld.js

禁用IE中的调试器(调试器选项卡,套接字符号;从左侧第八),从而使asm.js允许您打开开发工具,但看到执行速度较慢。我有一种可怕的感觉,当调试器关闭时,减速实际上只是IE11对asm.js优化的速度问题。

有很多关于IE11对asm.js的优化程度很差的引用。caniuse.com甚至将IE11作为根本不支持asm.js的列表。

https://caniuse.com/#feat=asmjs

这似乎是由Microsoft自己备份的:

https://developer.microsoft.com/en-us/microsoft-edge/platform/status/asmjs/

当然,它似乎得到了一些支持,尽管它显然存在一些速度问题,例如,许多基准都表明了这一点:

https://github.com/Kukunin/asm.js-benchmark/blob/master/README.md

它显示IE11比其他浏览器慢约10倍,或者:

https://www.ghacks.net/2014/11/03/massive-benchmark-highlights-asm-js-performance-of-web-browsers/

其依据是:

https://kripken.github.io/Massive/ -你可以自己试试。

还有很多其他人。这可能只是因为asm.jsasm.js实现非常糟糕,因此它比没有它的要慢得多。

编辑:添加了Microsoft状态链接.

票数 10
EN

Stack Overflow用户

发布于 2021-03-30 14:40:59

关于这个问题,有两个解决办法:

  1. 在初始化函数中添加setInterval(30000, () => {})
  2. MutationObserver=null添加到主html的开头

您也可以参考这里的讨论:https://github.com/OfficeDev/office-js/issues/521

票数 1
EN

Stack Overflow用户

发布于 2018-02-05 15:49:57

这只是猜测,但我在反应方面也有类似的问题-然后我发现:

远程调试时,js包使用的是chrome的JSC,在设备上运行时使用的是Apple在手机上提供的JSC。

确保当开发人员工具打开/关闭时,urho3d不会改变环境。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48580255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档