javascript - 使用 documentFragment 的 IE 性能不佳

标签 javascript internet-explorer dom-manipulation

为了测试 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;
}

最佳答案

我想我已经找到了:它看起来像,虽然 documentFragment 应该是一个“离线”元素(一个不属于实时 DOM 的元素)IE 没有不要这样对待它。强制片段真正离线的方法是向其附加一些元素,将其display 属性设置为none,然后附加其余元素该元素的元素。完成后,删除 display:none 属性,然后可以将 documentFragment 附加到 DOM。

它仍然慢了三倍(在我的 PC 上它仍然需要大约 1-1.5 秒,而在 Chrome/Firefox 中对于 10000 个元素大约需要 2-300 毫秒)。因此,对于 IE(甚至版本 10),使用 innerHTML 将一堆元素添加到 DOM 是更快的方法。我会说,IE 仍然是开发人员的噩梦。

关于javascript - 使用 documentFragment 的 IE 性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14080365/

相关文章:

javascript - 区分浏览器关闭事件和注销事件

javascript - 使用javascript删除数组元素

CSS: float :右不能正常工作

internet-explorer - Cakephp Session 值未在 IE 浏览器中获取

javascript - 生成元素和关联 $.data() 的更有效方法? [jQuery]

jquery - 为什么这个 div 不添加 jQuery 中的类?

javascript - React-hook-form v7 - 自定义输入警告函数组件无法给出引用

javascript - 在迭代 JavaScript 对象的属性时修改它

javascript - SignalR 和 IE 问题 - 投票正在进行中

javascript - 两次追加 DOM 元素 (jQuery)