【发布时间】:2017-12-12 02:01:15
【问题描述】:
首先让我说我不是 JavaScript 开发人员,所以这个问题可能相当基本。
在模拟 IE 的非标准 all 属性时,我使用的是 getElementsByTagName("*"),这两种方法之间是否存在显着的性能差异?
【问题讨论】:
首先让我说我不是 JavaScript 开发人员,所以这个问题可能相当基本。
在模拟 IE 的非标准 all 属性时,我使用的是 getElementsByTagName("*"),这两种方法之间是否存在显着的性能差异?
【问题讨论】:
如果有兴趣,您可能会发现 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 库可以规避这个缺陷,但您确实应该使用一个来避免跨浏览器的麻烦。
【讨论】:
基本上不应该有明显的性能影响,并且无论如何使用document.all 是不可接受的。
然而,有一个问题是为什么你会对收集每个元素的集合感兴趣?我想不出一个用例不能用另一种方式更好地处理的副手。
【讨论】:
不是真正的性能影响,但值得注意:从 getElementsByTagName 返回的 nodeList 是live。如果你操作 DOM,列表也会改变以反映这一点。
【讨论】:
不同的浏览器和不同版本的浏览器有不同的性能特点。如果您正在操作大型 DOM,您应该在您关心的浏览器上进行基准测试。考虑 Javascript 库 benchmarks people post。它们展示了不同浏览器的性能有多大差异。因此,如果不知道您使用的是什么浏览器,这个问题就无法真正回答。但是,您也应该警惕过度优化的东西,这对于大多数人来说可能在大多数机器上实际上花费零时间。
【讨论】: