首页 文章

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

提问于
浏览
10

我有一个非常大的javascript应用程序,其中主要包含asm.js代码(它是基于urho3d c引擎构建的,它们被编译为asm.js) .

它在大多数浏览器(chrome,firefox,safari,edge)上都运行良好,但在IE11上却非常慢 . 问题是,在打开开发人员工具之前,它只会很慢 . 随着开发人员工具的开放,IE11变得快10倍,几乎和其他浏览器一样快 .

以下是重现问题的最小示例:
http://test.sebbia.com/urho3d/test.html
在任何工作浏览器中打开页面, "Run - start" 消息和 "Run - finish" 消息之间的时间应该在1-2秒左右 .
在没有开发者工具的情况下在IE11中打开页面,时间应该在35-50秒左右 .
打开开发人员工具并重新加载,时间应该在2-3秒左右 .

另一个重要的注意事项是,如果我在开发人员工具中开始分析会话,那么性能就会下降,就像开发人员工所以我实际上可以描述问题 . 但是我花了几个小时进行分析,并且我尝试在大函数中插入日志消息,但我没有发现瓶颈 . 所有函数的执行时间大致相同,如果我在大函数的中间插入日志消息,它们通常会分成两个相似的部分 . 因此没有单一的函数负责减速,代码执行速度很慢 . 位移,函数调用,算术运算 - 与开放式开发人员工具相比,它们似乎只占用了太多时间 .

我真的需要让我的应用程序在IE11上工作,并且它与开发人员工具打开的事实让我发疯 . 我试图找到一种方法让IE认为工具即使不工作也是开放的,或通过任何其他方式获得良好的性能 . 所以我的问题是 how can I achieve performance equal to IE11 with developer tools open without actually manually opening the tools

这是一个非常广泛的问题,所以我想将其分解为几个较小的问题:

  • 有没有办法让IE11认为开发人员工具是开放的?也许有一些像x-ua兼容的元标记我缺少?

  • 当开发人员工具关闭时,导致速度减慢的原因是什么?我听说在IE8和9上没有开发者工具的情况下console.log函数调用很慢,也许在IE11上有类似的东西?也许asm.js没有优化?如果我知道造成这种情况的原因,我至少可以尝试重写代码来避免这种情况 .

  • 有没有办法从javascript代码打开开发人员工具?也许我可以要求用户按网站上的按钮“让应用更快” . 要求他们按F12或导航设置似乎太多了 .

2 回答

  • 0

    debugger 被启用时,asm.js编译将是 disabled 并且执行将回退以正常JS执行 - 您可以在执行开始时沿着这些行看到 console.log .

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

    在Firefox中 asm.js type error: Disabled by debugger

    而当您尝试时,Chrome将无法在调试器中打开 01_HelloWorld.js .

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

    有很多对IE11的引用都没有针对 asm.js 进行优化 . caniuse.com甚至将IE11列为不支持 asm.js .

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

    这似乎得到了微软自己的支持:

    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/ - 您可以亲自尝试一下 .

    还有很多其他人 . 可能只是因为它的IE11实现很差,所以它比它没有它慢得多 .

    EDIT: Added Microsoft platform status link.

  • 7

    这只是一个猜测,但我在react-native中遇到了类似的问题然后我发现了这个问题:

    远程调试时,你的js软件包正在使用chrome的JSC,当在设备上运行时,它正在你的手机上使用Apple提供的JSC .

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

相关问题