【发布时间】:2012-12-14 08:37:49
【问题描述】:
为了测试 DOM 操作与 innerHTML,我使用documentFragment (web page) 将 10000 个href 元素附加到div 元素中。 Chrome 或 Firefox 的性能还可以,但在 IE(10、9、8)中性能非常差,大约需要 10-12 秒。谁能解释这种差异和/或详细说明提高 IE 性能的解决方案?
这是一个 jsfiddle 演示它。
方法:
function useFragment(){
var frag = document.createDocumentFragment(),
i = 10000,
rval = document.createElement('span');
frag.appendChild(rval);
do {
var optText = 'option '+i
,ref = document.createElement('a')
,zebra = i%2 ? 'zebra' : ''
,islist = true
,isSel = i === 5
;
rval.insertBefore(ref,rval.firstChild);
ref.appendChild(document.createTextNode(optText));
ref.id = 'opt' + i;
ref.className = zebra + (islist && isSel ? ' scrollSelect' : '');
ref.href = '#' + i;
ref.title = optText;
} while (i-->0);
return rval;
}
【问题讨论】:
-
我以前从未听说过文档碎片...
-
您好 Jan,添加了关于该主题的 Resig 文章的链接。
-
我认为你测量时间的方式是有缺陷的。例如,您在片段计时的计时区域内定义
useInnerHtmlBttn.onclick处理程序。 -
可能是这样(jsfiddle现在调整了),但基本的一点是IE使用这种方法非常非常慢。除了 IE 怪物总是较慢并且总是需要 tweeking 才能使事情正常工作这一事实之外,我就是不知道为什么。
-
您的测量结果与您链接的文章中的观察结果不一致。
标签: javascript internet-explorer dom-manipulation