【发布时间】:2018-02-02 02:41:30
【问题描述】:
我想知道在 CSS 中对规则进行分组可能会对解析和渲染性能产生什么影响。
方法一:
.class1 {
margin: 10px;
padding: 20px;
color: #ccc;
}
.class2 {
margin: 10px;
padding: 30px;
color: #ddd;
}
.class3 {
margin: 20px;
padding: 30px;
color: #eee;
}
.class4 {
margin: 20px;
padding: 20px;
color: #fff;
}
vs 方法2:
.class1,
.class2 {
margin: 10px;
}
.class3,
.class4 {
margin: 20px;
}
.class1,
.class4 {
padding: 20px;
}
.class2,
.class3 {
padding: 30px;
}
.class1 {
color: #ccc;
}
.class2 {
color: #ddd;
}
.class3 {
color: #eee;
}
.class4 {
color: #fff;
}
当然,我们讨论的是具有相同规则分组的大型 css 文件,因此有时相同的选择器会被分割成很多块。
它对 css 解析和渲染的影响是否足以放弃这种方法以支持更大的文件,但更清洁并将所有规则收集在一个选择器中?
选择器匹配可能很昂贵。在现实生活中,这些选择器中的每一个都不仅仅是一个类,而是 2-3 个嵌套类。因此,对于每个元素,浏览器必须匹配选择器三次才能应用所有规则。首先是边距,然后是填充,然后应用颜色。第二种方法似乎非常昂贵。
【问题讨论】:
-
另外,分组被带到了一个非常极端的水平。不是按相似元素的逻辑分组,而是按字面意思是所有具有相同规则值的元素。在我看来,它已经过度干燥了。
-
过度干燥也是一种不好的做法joelabrahamsson.com/the-dry-obsession
标签: css performance parsing rendering css-parsing