Internet Explorer 11 performance with JS

Internet Explorer 11 performance with JS

本文关键字:with JS performance Explorer Internet      更新时间:2023-09-26

我有一个由GWT生成的相当复杂的JavaScript,它在所有浏览器(包括IE10)中都运行良好,但在IE11中我面临着性能问题。

激活探查器,我发现最消耗的代码是如何的......(按最消耗的顺序)

clientWidth、offsetHeight,以及具有压轴值的类似方法:

clientWidth 32 秒 (32806ms),只需 60 次调用偏移高度 181 次调用时高度 29 秒

在我看来,我的性能问题的原因在IE11中本地化(考虑到整个代码在IE10中的执行时间约为2秒),除此之外,我自然可以开始优化减少调用次数(如果可能的话)我想了解我使用的方法或其他方法是否有任何问题有谁知道IE11有什么问题?

更新:只是为了给出一个比较项:在文档模式下相同代码中的 clientWidth = 10 它是 15ms...相差 2000 倍,太奇怪了,我找不到 IE 的错误,在文档模式 Edge (11) 与 10 中分析的相同代码、相同方法

更新:使用探查器进行更深入的工作似乎 clientWidth 在我的树中挖掘了更多时间:

我看到:clientWidth -> Layout -> html-> body -> table x -> 生成的父项用于显示:表 -> td -> 表-

>生成的表用于显示:表 -> td -> 表.......

以此类推了很长时间(我无法到达树的尽头!

有谁知道显示:表格到底是什么意思? 我唯一能猜到的是IE11由于某种原因越来越多地在DOM树上运行以计算宽度...但我猜不出如何打破这个漫长的循环

使用解决方法进行更新:有趣的是(并确认到目前为止所看到的),它存在一种"解决"性能问题的方法:将最外部的div/容器设置为固定大小(至少两个维度中的一个),以使IE更容易计算容器大小并解决每个问题。这是一个有趣的解决方法,在某些情况下可能很有用,不幸的是,就我而言,我需要保持"100%"的大小以适应不同的屏幕......所以不是一个可接受的解决方法

使用可能的字段限制进行更新:似乎涉及cellWidth和cellHeight的大量使用,我的JS几乎为每个div设置了单元格大小和实际大小作为百分比,删除单元格大小似乎将每次调用的大小计算时间减少到1ms!

我不能说我达成了完美的理解,但不知何故我解决了:

首先,使用像素表示大小会有所帮助,但实际和主要问题是我至少设置了 GWT cellHeight="150px" 的一个组件,并且对于相同的元素 Height="100%",这在 JS 和 html 中生成了一个表格,其中 IE 的大小令人困惑,而其他浏览器能够管理它。基本上整个问题是,如果存在不完全线性的东西,则计算尺寸的时间会变得很大,而不会引发任何警告或错误!