为什么在Firefox中innerHTML =“”慢

时间:2009-03-04 08:28:31

标签: javascript firefox dom browser

我正在测试不同方法的速度,以便动态地将HTML元素添加到DOM。我已经构建了一个测试人员here(代码是工作版,非常邋))。对于不同的浏览器,结果是(非常)不同的,Chrome获得速度的所有点,Opera是第二个 - 但这不是问题。

在Firefox中,我发现了清除div(来自它的childNodes)的问题。当添加了大约50.000个div元素时,只需使用

清除时间
[div].innerHTML = "";

这里发生了什么? firefox是否为此实现了一些内在的垃圾收集方法?

2 个答案:

答案 0 :(得分:14)

虽然我不确定innerHTML =“”但你遗漏了一个可能使用DocumentFragments插入DOM的快速appo:As John Resig shows

正如ÓlafurWaage已经提到的那样,尽管innerHTML在很多情况下都比较快,因为它不是任何W3C标准的一部分,但如果它们存在的话,怪癖的可能性要大得多。更不用说innerHTML不是现代浏览器中的事实标准。

This blog post似乎表明,当使用innerHTML删除元素时,Firefox会花费大量时间进行清理。

  

在某些浏览器中(最值得注意的是,Firefox),虽然innerHTML通常比DOM方法快得多,但它花费了不成比例的时间来清除现有元素而不是创建新元素。知道了这一点,我们可以通过使用标准DOM方法删除父元素并使用innerHTML创建新元素来组合销毁元素的速度。

答案 1 :(得分:2)

innerHTML不是W3C DOM规范的一部分。

  

永远不应该使用它来编写表的一部分 - 应该使用W3C DOM方法 - 尽管它可以用来编写整个表或单元格的内容。

     

由于此属性没有公开规范,因此实现差别很大。例如,当文本输入文本输入时,IE将更改输入的innerHTML属性的value属性,但Gecko浏览器不会。

     

对于那些希望遵守标准的人,here is one set of JavaScript functions提供序列化或解析XML,以便通过DOM设置定义为字符串的元素内容,或者将从DOM获取的元素内容作为字符串。< / p>

Source - Mozilla Dev