首先让我说我不是JavaScript开发人员,所以这个问题可能很基本。
在模拟我使用getElementsByTagName("*")
的IE非标准all
属性时,两种方法之间是否存在显着的性能差异?
答案 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。它们展示了不同浏览器的性能差异。因此,如果不知道您使用的是哪种浏览器,问题就无法解决。但是,对于大多数机器上的大多数人来说,你也应该警惕过度优化可能有效占用零时间的东西。