Web 浏览器 DOM 自 90 年代后期就已经存在,但它仍然是性能/速度方面的最大限制之一。
我们有来自 Google、Mozilla、Microsoft、Opera、W3C 和其他各种组织的一些世界上最聪明的人才为我们所有人研究 Web 技术,所以显然这不是一个简单的“哦,我们没有优化它“ 问题。
我的问题是,如果我要在专门处理此问题的 Web 浏览器部分工作,为什么我会很难让它运行得更快?
这似乎与其他地方正在发生的事情背道而驰,例如性能接近 C++ 代码的 JS 引擎。
快速脚本示例:
for (var i=0;i<=10000;i++){
someString = "foo";
}
由于 DOM 导致缓慢的示例:
for (var i=0;i<=10000;i++){
element.innerHTML = "foo";
}
根据要求的一些细节:
基准测试后,看起来不是一个无法解决的慢问题,但经常使用错误的工具,使用的工具取决于您跨浏览器在做什么。
貌似不同浏览器的 DOM 效率差别很大,但是我原来认为 dom 慢且无法解决的假设似乎是错误的。
我对 Chrome、FF4 和 IE 5-9 进行了测试,您可以在此图表中看到每秒的操作数:

当您使用 DOM API 时,Chrome 快如闪电,但使用 .innerHTML 操作符时要慢得多(慢 1000 倍),但是,FF 在某些方面比 Chrome 差(例如,附加测试比Chrome),但 InnerHTML 测试的运行速度比 Chrome 快得多。
从 5.5 开始,IE 似乎在使用 DOM append 方面变得更糟,而在 innerHTML 方面变得更好(即,IE8 中的 73ops/sec 现在 IE9 中的 51 ops/sec)。
我这里有测试页:
http://jsperf.com/browser-dom-speed-tests2
有趣的是,似乎不同的浏览器在生成 DOM 时都面临着不同的挑战。为什么这里会有这样的差距?