为什么.classname比element.classname更糟糕

时间:2011-12-14 13:03:43

标签: css performance

有人可以帮我解释原因:

#id .classname

比以下更糟:

#id element.classname

从渲染/性能角度来看?

5 个答案:

答案 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名工程师为您工作。