CSS和jQuery Selector Speed

Jam*_*man 10 css jquery css-selectors jquery-selectors

每当我遇到这样的事情时,在jQuery中:

$("div#MyDiv").....
Run Code Online (Sandbox Code Playgroud)

我通常会对开发人员说:"不要把它div放在前面#MyDiv,ID选择器是最快的." 即

$("#MyDiv")....
Run Code Online (Sandbox Code Playgroud)

这是因为后者将直接挂钩document.getElementById而不必首先扫描所有<div>元素的DOM .

我的问题是,相同的规则是否适用于CSS选择器?即,而不是:

div#MyDiv
{
}
Run Code Online (Sandbox Code Playgroud)

简单地说它更快吗?:

#MyDiv
{
}
Run Code Online (Sandbox Code Playgroud)

(我意识到CSS选择器无论如何都非常快,所以实际上两者都不会产生显着差异.)

非常感谢

编辑

任何链接或引用可能对本讨论的目的有用.谢谢 :-)

T.J*_*der 11

我会说它不太可能产生任何现实世界的差异.从理论上讲,是的,只需要少一点检查(因为根据规范,div#foo确实需要div匹配选择器).但它在现实世界的浏览器应用程序中产生任何真正差异的可能性?接近于零.

也就是说,当我看到HTML应用程序中的内容时,我总是畏缩不前div#foo.HTML只有一个ID类型属性(id),因此不需要进一步的限定.你让CSS选择器引擎(或者是浏览器的或jQuery的)更加努力弄清楚你的意思,你做出选择脆弱的(如果div成为一个footer,例如)等,当然你给自己开出了stoopid选择器实现,无法识别它可以通过ID查找内容,然后检查它是否是a div,所以查看所有div秒.(这样的实现是否存在?可能,你永远不会知道.)除了一些边缘情况,它总是让我觉得有人不太清楚他们在做什么.

所以对我而言,速度不是主要论点.毫无意义.;-)