使用 .find() 方法比基本的后代选择方法更快吗?

7

Paul Irish的博客中,第30张幻灯片提到:

$('#container').find('div.robotarm')$('#container div.robotarm')更快。

这是真的吗?


3
我认为意见并不重要。创建一些基准,并多次运行它们(最好在不同的浏览器上),并检查结果。这是获取明确答案的唯一方式,我个人认为。 - Dan Diplo
这可能会有所帮助:https://forrst.com/posts/I_ran_a_little_speed_test_on_jQuery_selectors_Y-3mQ - Kriem
3个回答

5
也许在 jQuery 的早期版本中是这样的。然而,表达式

$('#container div.robotarm')

通过jQuery规范化为

$('#container').find('div.robotarm')

所以,$('#container div.robotarm') 速度变慢的唯一原因就是函数调用的开销。但这只是微不足道的差异。

如果这个调用没有被规范化,那么 sizzle (Resig 的 CSS 选择器引擎)将会被用来查找该元素(从右向左)。当然,这样会慢得多。


1
有人能引用一些文件来支持这个吗?在快速的谷歌搜索中找不到任何东西。 - Giscard Biamby

2

既然你要求意见,那这并不重要。

在某些浏览器下、特定的DOM配置下,总是会有一种情况下其中一个运行得比另一个快。但没必要过于纠结。


1

只有在按ID搜索时才是正确的。

但是,当我们按标签名称搜索时,在现代浏览器中返回的结果不同,其中$('div').find('p')比后者$('div p')慢,因为后者使用了querySelector()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接