有人可以帮我解释原因:
#id .classname
比以下更糟:
#id element.classname
从渲染/性能角度来看?
答案 0 :(得分:1)
只是因为.classname
必须检查指定类名的所有元素,而type.classname
只能检查与指定类型匹配的元素。
答案 1 :(得分:1)
因为DOM具有特殊功能(getElementByTagName
),专用于通过标记名称查找树中的所有元素。这些函数使用查找表并进行了很好的优化。但是,类名不存在这样的方法,并且查找类名需要遍历所有树并检查现有的类名。通过减少要迭代的树的大小可以更快地实现此算法,并且使用element.
前缀就是这样:它减少了树的大小以查找类名。
答案 2 :(得分:1)
我认为,因为在第一个示例中,浏览器呈现引擎应该在classname
元素内搜索具有类#id
的每个元素。
第二个例子会更快,因为引擎只查找该类的每个元素element
。
对于单词游戏感到抱歉,但从性能角度来看,这应该是没有影响力的。
答案 3 :(得分:0)
不是。
对于第一个选择器,浏览器检查一个元素是否具有该类,然后检查是否有任何后代具有该id。
对于第二个选择器,浏览器检查一个元素是否具有该类,然后检查该元素是否与标记名称匹配,然后检查是否有任何后代具有该id。
如果选择器具有相同的效果,则第一个选择器 better ,因为浏览器必须执行更少的检查以匹配规则。
有关高效选择器的更多信息:http://code.google.com/speed/page-speed/docs/rendering.html#UseEfficientCSSSelectors
答案 4 :(得分:-2)
不要过度优化您的代码,明确(这只是关于您和您的习惯,或您的团队标准)并稍后了解性能。
当您的css选择器成为您的瓶颈时,您将有1 000名工程师为您工作。