【发布时间】:2013-06-14 09:23:01
【问题描述】:
Web 浏览器是否会合并 css 规则的执行以使其高效运行?
我知道多个css规则是级联的。
我只对级联规则的性能影响感兴趣。
例如,对于以下内容:
button,
input,
select {
display:block;
}
select {
margin:1rem;
}
我知道display:block; 和margin:1rem; 都将应用于selects。
我只是不确定浏览器是否优化了其内部 css 选择器检查。在上面的示例中,次优浏览器可以检查:
- 如果按钮、选项或选择,则显示:块;
- 如果选择,则边距:1rem;
执行这些检查的最佳方式是:
- 如果按钮或选项,则显示:块;
- 如果选择,则显示:块;保证金:1rem;
大多数现代浏览器是否足够智能,可以合并 select 选择器的两条规则的执行,以便它们运行第二组检查(最佳检查)?
如果是这样,哪些浏览器及其版本执行 css 规则合并?
也可以提供有关此文档的链接或浏览器功能列表站点上的信息。
我对此感兴趣,因为我想最小化我的 css(这有时涉及复制选择器部分以避免重复声明),并使我的 css 更易于维护。但是,我想确保我的客户的浏览器不会浪费运行冗余 css 选择器的周期。
谢谢。
【问题讨论】:
-
浏览器这样做有什么意义?
-
@matt-ball 我刚刚编辑了我的问题以澄清它。
-
再一次,结合未解析/未解释的 CSS 规则的文本有什么意义?无论如何,浏览器必须解析整个 CSS 文本;如果要通过组合规则进行优化,它将发生在浏览器用来表示 CSS 规则的内部内存结构中,而不是人类可读的文本中。
-
@matt-ball,我不是在谈论规则的文本。一旦规则被解析,它们必须作为代码执行。我感兴趣的是浏览器是否会次优地执行两个 if 条件来检查一个元素是否是一个选择,或者浏览器是否会最优地只执行一个。次优和最优伪代码现在都作为单独的有序列表包含在我的问题中。
-
此时它只能依赖于实现,因此您需要询问特定浏览器的 CSS 引擎。
标签: css performance css-selectors coalescing