【发布时间】:2011-08-27 01:53:58
【问题描述】:
在选择器的右侧要具体,在左侧不太具体。
// unoptimized
$('div.data .gonzalez');
// optimized
$('.data td.gonzalez');
有人能解释一下为什么不那么具体的左侧作为 CSS 选择器会更快吗?
这是 Sizzle 的事情还是同样适用于
document.querySelectorAll?在 CSS 文件中使用“类似优化”的 CSS 选择器是否有任何速度提升?
【问题讨论】:
-
我猜这是错的,不是吗?从很多中选择很多,然后从这个很多中选择一点比从很多中选择一点然后从这个小中选择很多更昂贵。
-
@ariel:Sizzle(jQuery 选择器引擎)是一个有趣的野兽。有时,表面上看起来很明显的事情实际上并不真实。我似乎记得 Sizzle 有时会(显然是出于充分的理由)由内而外地工作——例如,首先找到
td.gonzalez,然后查看它是否在.data内。但我怀疑就像大多数概括一样,它可能是错误的,也可能是正确的,这取决于具体情况(例如,div与td元素的数量)。 -
第二个版本是否优化很大程度上取决于你的 HTML。
-
如有疑问,请使用 jsperf.com
-
@Gary:根据您使用的浏览器,它会有很大差异。如果您使用的是现代浏览器,它将具有
querySelectorAll,并且您可能不会注意到任何差异,因为它全部位于浏览器引擎的内部。但是,如果您使用的是 IE6 或 IE7,您会注意到一个很大的差异(在综合测试中;这是否会转化为现实世界的差异完全是另一回事)。试试这个,例如,在 IE7 中:jsperf.com/specific-left-or-right 更具体的右侧很容易获胜。但这都是微优化。
标签: javascript jquery css optimization jquery-selectors