为什么在IE8中使用getBoundingClientRect会变慢?

5
我正在使用IE9,通过F12工具将其设置为IE8标准模式来测试我的页面。该页面脚本使用getBoundingClientRect 来计算在视口中可见的内容。
使用分析工具,我看到对getBoundingClientRect的调用需要很长时间。例如,244次对该函数的调用花费了4,361毫秒的独占时间!
在IE8中这个函数为什么这么慢?当在IE9模式下运行,或在Chrome、FireFox等浏览器中运行时,该函数似乎很快。

每次调用它都可能触发DOM回流,具体取决于您如何以及在哪里使用它。 - Bergi
1个回答

0

getBoundingClientRect最初由Microsoft在IE5中引入,目前没有已知的性能问题。

jQuery UI等其他库使用它,过去当他们转向它时,效果非常好:http://ejohn.org/blog/getboundingclientrect-is-awesome/

我发现了一个比较jQuery类似计算getBoundingClientRect的测试: http://jsperf.com/getboundingclientrect-vs-jquery 通常getBoundingClientRect胜出

您正在以IE8兼容模式运行您的网站,这有时会影响性能,请您在真正的IE8浏览器中进行测试。在此情况下,性能应该是相同的。


我打算在本周晚些时候设置一个IE8虚拟机并进行测试。我希望这只是兼容模式运行缓慢的问题。 - Andrew Davey
4
@AndrewDavey,我遇到了同样的问题 - 你知道性能问题是否只是兼容模式的副作用吗? - Lars Grammel
1
@AndrewDavey已在真正的IE8上进行了测试。性能非常差。此外,如果您进行大量调用,即使在Chrome和IE11中,它在其他浏览器中的表现也相对较差。IE11比Chrome慢,几乎像IE8一样慢。 - cassandrad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接