JavaScript id + class与类选择器性能

时间:2016-03-21 22:00:14

标签: javascript getelementbyid

我想知道选择一个位于具有ID的元素内的元素类的速度更快。例如,假设我们有一个列表,ul id="list"li元素class="list",然后更快(和/或更好的做法):

document.GetElementById('list').getElementsByClassName('list')

document.getElementsByClassName('list')

我知道前者只会定位#list元素中的元素,让我们假设该类对整个文档是唯一的。

2 个答案:

答案 0 :(得分:3)

getElementsByClassName是一个O(n)操作,因为它必须检查每个元素以检查是否存在要检查的类名。如果n有限,则速度会增加,但速度差异只会很小,因为整个操作速度仍为O(n)。

结果,这是微优化的一个例子。两者都没有明显更快。使用子选择器应该与页面组成相关,以便在速度考虑方面区分页面的样式部分。

答案 1 :(得分:0)

第一个应该是最快的,因为按类名检索元素将被限制在该列表元素中。但是,它取决于浏览器如何在内部索引元素。

您可以在此处运行一些基准:http://jsperf.com/javascript-select-by-id-vs-by-class

在我的测试中,第二种方法在chrome和IE上更快,但在FF上大致相同。这意味着基于课程名称和FF的Chrome和IE索引元素大部分都没有或者做得不好。