选择器:Id与上下文

时间:2010-08-04 21:07:57

标签: javascript jquery performance jquery-selectors css-selectors

我使用jQuery。

我一直在阅读很多关于选择器性能和优化我们的AJAX应用程序的内容。我希望提高我的选择器性能。我知道所有jquery性能提示。我没有找到问题的确切答案。我正在使用几乎所有当前的jquery性能提示,但我的应用程序似乎仍然相当滞后。

所以,为了优化我从选择器开始。

我的问题是:从上下文降序到定位ID的速度要快于定位ID吗?我不能说很多不同。

示例:

$('#childId', $higherElm);

比仅仅

更快
$('#childId');

????

提前致谢。

5 个答案:

答案 0 :(得分:3)

正如jQuery source所示,$('#id')仅执行document.getElementById,而$('#id', context)执行$(context).find('#id')。所以第一个更快。

答案 1 :(得分:1)

根据this article,拥有更少,更直接的选择器会更快。 #id优于#id #child,至少在css ...

答案 2 :(得分:1)

选择ID是您可以做的绝对最快的选择。

添加任何其他东西只会减慢速度。

答案 3 :(得分:0)

当您选择“id”时,上下文无关紧要,因为引擎无论如何都会调用getElementById()。当然语境在语义上很重要,但检查应该非常快。 (我认为,从那个角度来看,上下文应该稍微较慢,但如果它对你的页面有实际意义,你就不能停止这样做。)

答案 4 :(得分:-1)

不确定上面描述的语法是否有益,但是在http://www.artzstudio.com/2009/04/jquery-performance-rules/它在规则#5中确实表明使用子查询更快(这是有意义的)......他们使用$来演示它但是,更高的Elm.find()语法。

在你的例子中 - 因为它直接映射到getElementById这是一个本机函数调用 - 我认为你不会看到很多改进。但是,以元素集为目标(因此循环)的选择器可能会看到一些或主要的好处。