Jquery 使用E#C CSS选择器比使用#C有什么性能优势吗?

Jquery 使用E#C CSS选择器比使用#C有什么性能优势吗?,jquery,performance,jquery-selectors,Jquery,Performance,Jquery Selectors,我目前正在阅读jQuery以填补一些知识空白 查看各种CSS选择器,我发现:- #C(ID为C的任何元素) E#C(ID为#C的任何E类型元素) 我知道特定性在CSS规则的应用中是一件大事,但是考虑到在页面上有重复的ID是一种不好的做法,我想知道为什么会存在第二种形式,以及在jQuery中如何处理它 在询问DOM时,它是否具有性能优势?(即立即限制选择范围)。这个问题主要适用于jQuery,但我也想知道它是否与渲染引擎等有任何关系。jQuery使用自底向上搜索。它从最后一个选择器开始并向

我目前正在阅读jQuery以填补一些知识空白

查看各种CSS选择器,我发现:-

  • #C
    (ID为C的任何元素)

  • E#C
    (ID为#C的任何E类型元素)

我知道特定性在CSS规则的应用中是一件大事,但是考虑到在页面上有重复的ID是一种不好的做法,我想知道为什么会存在第二种形式,以及在jQuery中如何处理它


在询问DOM时,它是否具有性能优势?(即立即限制选择范围)。这个问题主要适用于jQuery,但我也想知道它是否与渲染引擎等有任何关系。

jQuery使用自底向上搜索。它从最后一个选择器开始并向上过滤

例如:

$(“#id1.class1.class2”)查找class2的所有类,然后筛选父类为class1的所有类的结果,然后再筛选父类为id1的所有类


$(“#profile”)和$(“div#profile”)本质上是相同的,大致相当于ms的一小部分。但最好了解性能优势以及如何适当地遍历DOM。

jQuery使用自底向上的搜索。它从最后一个选择器开始并向上过滤

例如:

$(“#id1.class1.class2”)查找class2的所有类,然后筛选父类为class1的所有类的结果,然后再筛选父类为id1的所有类

$(“#profile”)和$('div#profile')本质上是相同的,大致相当于ms的一小部分。但最好了解性能优势以及如何适当地遍历DOM。

jQuery有一个简单的方法来处理带有直接
文档的形式为
\C
的选择器。getElementById
。表单
E#C
的选择器不由该路径处理,而是委托给库

因此,我不知道
E#C
在实践中如何提供任何性能优势,而在理论上也没有更好的性能。事实上,
E#C
要慢得多;⑨

这就是说,
E#C
选择器当然更具限制性,因此无论选择是通过jQuery还是任何其他媒介进行的,两者的行为都会有所不同。即便如此,我也从未使用过
E#C
(或见过它被使用);我想不出任何理由在不同的页面上重复使用id


诚然,在现实生活中,选择器不会在循环中运行,因此性能差异并不重要。

jQuery有一个直接的
文档.getElementById
来处理
\C
形式的选择器。表单
E#C
的选择器不由该路径处理,而是委托给库

因此,我不知道
E#C
在实践中如何提供任何性能优势,而在理论上也没有更好的性能。事实上,
E#C
要慢得多;⑨

这就是说,
E#C
选择器当然更具限制性,因此无论选择是通过jQuery还是任何其他媒介进行的,两者的行为都会有所不同。即便如此,我也从未使用过
E#C
(或见过它被使用);我想不出任何理由在不同的页面上重复使用id



不可否认,在现实生活中,选择器不会在循环中运行,因此性能差异并不重要。

Jon,这是一个很好的答案。明确无误,有文件和腿部工作支持。谢谢,从我现在删除的答案中获取:如果你考虑了现代浏览器和CSS实现,那么当jQuery尝试“代码>文档.Query StReopTrAULL”(/Cube)时,使用浏览器的本地CSS选择器引擎,在回落到Sizzle之前,这意味着使用ID选择器将返回所有带有该ID的元素,不仅仅是第一次。在CSS中,这适用于任何ID选择器,其行为与任何其他选择器相同(例如,将类型或类附加到ID选择器)。乔恩,这是一个很好的答案。明确无误,有文件和腿部工作支持。谢谢,从我现在删除的答案中获取:如果你考虑了现代浏览器和CSS实现,那么当jQuery尝试“代码>文档.Query StReopTrAULL”(/Cube)时,使用浏览器的本地CSS选择器引擎,在回落到Sizzle之前,这意味着使用ID选择器将返回所有带有该ID的元素,不仅仅是第一次。在CSS中,这适用于任何ID选择器,其行为与任何其他选择器相同(例如,将类型或类附加到ID选择器)。另见。谢谢你的解释。乔恩明确了细节,但我很感激你的回答提供了额外的背景。谢谢你的解释。乔恩明确了细节,但我很感激你的回答提供了额外的背景。
$('#profile')
$('div#profile')