【发布时间】:2011-12-15 18:01:14
【问题描述】:
谁能帮我解释一下原因:
#id .classname
比:
#id element.classname
从渲染/性能的角度来看?
【问题讨论】:
标签: css performance
谁能帮我解释一下原因:
#id .classname
比:
#id element.classname
从渲染/性能的角度来看?
【问题讨论】:
标签: css performance
因为 DOM 具有特殊功能 (getElementByTagName),专用于通过标签名称查找树中的所有元素。这些函数使用查找表并进行了很好的优化。但是,类名不存在这样的方法,并且查找类名需要遍历所有树并检查现有的类名。通过减小要迭代的树的大小可以使该算法更快,并且使用 element. 前缀可以做到这一点:它减小了树的大小以查找类名。
【讨论】:
只是因为.classname 必须检查所有 元素是否符合指定的类名,而type.classname 只需检查与指定类型匹配的元素。
【讨论】:
我认为是因为在第一个示例中,浏览器渲染引擎应该在 #id 元素内搜索每个具有 classname 类的元素。
第二个示例会更快,因为引擎只查找具有该类的每个元素 element。
对不起,文字游戏,但是从性能的角度来看,这应该没有影响。
【讨论】:
不是。
对于第一个选择器,浏览器检查元素是否具有类,然后检查是否有任何后代具有 id。
对于第二个选择器,浏览器检查元素是否具有类,然后检查元素是否与标签名称匹配,然后检查是否有任何后代具有 id。
如果选择器具有相同的效果,则第一个选择器更好,因为浏览器只需进行较少的检查即可匹配规则。
更多关于高效选择器的信息:http://code.google.com/speed/page-speed/docs/rendering.html#UseEfficientCSSSelectors
【讨论】:
不要过度优化你的代码,让它清晰(这只是关于你和你的习惯,或者你的团队标准),然后再看看性能。
当您的 CSS 选择器成为您的瓶颈时,您将有 1000 名工程师为您工作。
【讨论】: