那么$('table.selectable td.capable input:text')
比$('table.selectable td input:text')
更可取吗?换句话说,指定一个类是加速还是减慢选择(假设在这种情况下不是绝对需要)?
我没有检查Sizzle实现,但在最好的情况下,td
会映射到类似getElementsByTagName()的东西,.capable
会映射到像getElementsByClassName()这样的东西(如果可用的话)。因此,两者在速度上是相当的。
然而,据我所知,还没有getElementsByTagNameAndClassName()
方法,因此解析td.capable
可能需要在DOM调用之后进行额外的过滤。所以,我倾向于认为它会更慢。
当然,一个基准可以肯定。
所以我用firebug进行了一些基准测试,在我在问题中列出的特定示例中,后者(没有td类说明符)更快。
取决于上下文。
一般来说,需要进行的子检查越多,速度就越慢,因为每次都需要时间。重点是,它们显然不一定是相同的结果。一个是另一个的子集。
在大多数情况下,目标是拥有针对所需特定集合所需的最少数量的选择器。还要记住,一些选择器的性能要比其他选择器好得多(由于浏览器方法的可用性)。ID选择器#id
和在现代浏览器中的标记选择器比类搜索.class
快得多,后者需要对.className
参数进行迭代字符串分析,或者实际上是基于属性的搜索,这通常非常相似。
如果有疑问,请执行度量。