根据stackoverflow的精神(感谢@Bill蜥蜴澄清这一点)我想介绍所有前端Web开发人员所熟知的小型自己的研究问题。
如何使用innerHTML或DOM操作编程DHTML时获得更好的jscript性能?
对于测试,我创建了单个HTML页面,其中包含“开始测试”按钮,该按钮运行5000次对功能,可以在innerHTML意识形态或DOM上编写。 (可以采用:http://codepad.org/HyiKRsNk)
我准备了3个测试(由@tomdemuyt提出的最后一个)
为其创建新的DIV和子文本
删除一些DIV(为了避免创建差异的影响,两个测试都使用相同的方式创建测试div,但删除不同)
添加onclick事件处理程序
<table><tbody><tr><td><span>text
构造。 DOM测试使用pair createElement / appendChild的顺序调用与(4)类似,但创建了2行<tr>
。 DOM使用特殊的辅助函数来简化:
treeHelper("table",
treeHelper("tbody",
treeHelper("tr",
不同的浏览器都会遵循测试结果。
亲爱的同事们请提供:在innerHTML更快的时候展示一些测试,在未上市的浏览器上开始我的测试。
答案 0 :(得分:1)
Opera(10.54):
Test Result
1.insert new element and text 30.00%
2.removeChild vs innerHTML='' 66.67%
3.set event handler 245.45%
4.test in depth of tree linear -62.16%
5.test in depth of tree (using helpr) -67.10%
Chrome(5.0.375.70):
Test Result
1.insert new element and text 318.18%
2.removeChild vs innerHTML='' 53.85%
3.set event handler 150.00%
4.test in depth of tree linear 41.67%
5.test in depth of tree (using helpr) -33.03%
火狐(3.6.4):
Test Result
1.insert new element and text 76.17%
2.removeChild vs innerHTML='' 50.56%
3.set event handler 1097.44%
4.test in depth of tree linear 32.94%
5.test in depth of tree (using helpr) 9.66%
IE(8):
Test Result
1.insert new element and text 46.92%
2.removeChild vs innerHTML='' 26.34%
3.set event handler 936.17%
4.test in depth of tree linear -35.42%
5.test in depth of tree (using helpr) -67.26%
<强>编辑(1)强>: 为每个浏览器2行添加深度建筑树的测试(树的线性测试深度,树的深度测试(使用帮助))。发现大多数浏览器不喜欢堆栈分配值,因为线性appendChild,appendChild ...比在treeHelper('table',treeHelper('tbody',....
上做同样快得多)答案 1 :(得分:1)
根据对原始问题的评论,我在此处添加了一个答案,详细阐述了为什么直接.innerHTML
到DOM manipulation
的比较非常难以简明评估。
基本上有一些主要问题:
1。)特别是IE(6,7&amp;较小程度8)有一堆浏览器错误导致所有代码方案的完整测试。 (IE有错误,无法在.innerHTML
,select
,table
,thead
,tbody
,{{1}设置tfoot
将溢出设置为auto的空元素设置为auto,其中内容高度超过1“row”,内容包含重要空格等的tr
元素。)
2。)添加的子节点的数量,类型(顺序)和深度将改变操作的性能。例如。通过添加表标签,然后是tbody,然后是tr,然后是td来添加表,然后内容与单独构建它并将其转储到页面中将改变性能。
3。)浏览器控制它何时执行GC(这会在浏览器清理时减慢浏览器的速度)。同样,浏览器扩展或另一个选项卡中的AJAX调用,IE8中的Web片段轮询服务器以获取更新,这将影响当前页面的执行方式。
因此,如果您想要对此进行全面测试,则需要测试几种不同的HTML子结构组合,我非常期望结果会有所不同。
我在家里有一些旧的测试,我会挖掘并添加到这个答案中进行更多的测试。