在 jQuery 中,每当我遇到这样的事情时:
$("div#MyDiv").....
我通常对开发人员说:“不要费心将 div
放在 #MyDiv
前面,ID 选择器是最快的。”即
$("#MyDiv")....
这是因为后者会直接 Hook 到document.getElementById
而不是必须为所有 <div>
扫描 DOM元素优先。
我的问题是,相同的规则是否适用于 CSS 选择器? IE。而不是:
div#MyDiv
{
}
简单的更快吗?:
#MyDiv
{
}
(我意识到 CSS 选择器无论如何都非常快,所以实际上两者都不会产生显着差异。)
非常感谢
编辑
任何链接或引用资料都可能对本次讨论有用。谢谢:-)
最佳答案
我会说它极不可能会在现实世界中产生任何差异。理论上,是的,需要的检查更少(因为根据 the spec ,div#foo
确实需要是 div
才能匹配选择器)。但它在现实世界的浏览器应用程序中产生真正差异的几率是多少?接近于零。
就是说,当我在 HTML 应用程序中看到类似 div#foo
的东西时,我总是感到畏缩。 HTML 只有一个 ID 类型属性(id
),因此不需要进一步限定。你让 CSS 选择器引擎(浏览器的或 jQuery 的)更努力地工作来弄清楚你的意思,你让选择器变得脆弱(如果 div
变成了 footer
,因为实例)等,当然,您确实让自己对一个愚蠢的选择器实现敞开大门,该实现无法识别它可以通过 ID 查找某些内容,然后然后检查以查看如果它是一个 div
,那么将浏览所有的 div
。 (这样的实现是否存在?可能,你永远不知道。)除了一些边缘情况,它总是让我觉得有人不太清楚他们在做什么。
所以对我来说,速度不是主要论点。毫无意义是。 ;-)
关于jquery - CSS 和 jQuery 选择器速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4095007/