0

在浏览器性能方面,我应该链接选择器调用吗?jQuery 是否会进行完整的文档搜索?

例如之间的区别$('.my_thing') and $('#outer_div .my_thing')

4

5 回答 5

1

我建议你阅读这篇关于 24ways 的文章:Your jQuery: Now With 67% Less Suck。尤其是Selector 优化部分。

正如您将在现代浏览器中看到的那样,类选择器非常快,但在 < IE8 中则不然。

我建议不要使用$('#outer_div .my_thing'),好多了$('#outer_div').find('.my_thing')

于 2013-04-04T19:32:08.923 回答
0

这完全取决于选择器。

在您的情况下,假设您没有.my_thing之外的元素#outer_div,两个选择器将非常快,因为它们将使用底层的getElementsByTagName.

您在这里比较了两个非常快速的选择器,因此差异并不重要。

于 2013-04-04T19:27:56.937 回答
0

常识说第一个例子,因为第二个例子需要额外的步骤,找到第一个元素,然后遍历它的 DOM 分支,直到找到第二个元素。

假设您正在 DOM 中搜索第一个元素,您实际上可以传递第二个元素(您正在寻找),因为循环的终止条件是找到第一个元素。

与大多数性能调整一样,改进将取决于浏览器。


相关: jquery 和 CSS 中最快的选择器方法 - ID 与否?

于 2013-04-04T19:28:06.347 回答
0

以下是有关该主题的一些有用文章:

http://blog.bigbinary.com/2010/02/15/how-jquery-selects-elements-using-sizzle.html http://dumitruglavan.com/jquery-performance-tips-cheat-sheet/ http:// /net.tutsplus.com/tutorials/javascript-ajax/quick-tip-think-right-to-left-with-jquery/

总而言之,随着 Sizzle 的引入,上述查询应该给出大致相同的性能数字。如果您使用旧版本,第一种方法应该更快。

于 2013-04-04T19:33:40.137 回答
0

另一个:

'#id'选择器最快,find是浏览器原生方法

$('#outer_div').find('.my_thing'); 
// or shorthand 
$('.my_thing', '#outer_div');
于 2013-04-04T19:34:02.320 回答