getElementsByTagName(“*”)的性能影响是什么?

时间:2009-02-03 08:48:05

标签: javascript cross-browser

首先让我说我不是JavaScript开发人员,所以这个问题可能很基本。

在模拟我使用getElementsByTagName("*")的IE非标准all属性时,两种方法之间是否存在显着的性能差异?

4 个答案:

答案 0 :(得分:7)

对于兴趣,您可能会发现John Resig的这个讲座很有趣。当使用像你这样的dom方法时,它与新手和有经验的用户相关。

它在许多浏览器中讨论了许多可靠的dom方法警告。

其中一个原因是,getElementsByTagName(“*”)将在IE5中返回 no 元素,并且在IE7下使用Objects + getElementsByTagName("*")执行weird things,并根据谈话,它是这样的:

  <a id="length"></a>

表现好像有人做过:

  var a = getElementsByTagName("a"); 
  a.length = ""; # This overrides the arrays length attribute :/ 

这样你就不能迭代数组了。

我不知道哪个javascript库绕过了这个漏洞,但你真的应该使用它来避免跨浏览器的头痛。

答案 1 :(得分:2)

基本上应该没有明显的性能影响,无论如何使用document.all都是不可接受的。

然而,为什么你会有兴趣收集一组每个元素?我想不出那个副手的单一用例,不能用另一种方式更好地处理。

答案 2 :(得分:0)

并非真正的性能影响,但值得注意:从getElementsByTagName返回的nodeList是 live 。如果你操纵DOM,列表也会改变以反映这一点。

答案 3 :(得分:0)

不同的浏览器和不同版本的浏览器具有不同的性能特征。如果您正在操作大型DOM,则应根据您关注的浏览器进行基准测试。考虑人们发布的Javascript库benchmarks。它们展示了不同浏览器的性能差异。因此,如果不知道您使用的是哪种浏览器,问题就无法解决。但是,对于大多数机器上的大多数人来说,你也应该警惕过度优化可能有效占用零时间的东西。