所以我根据@SWilk 的建议进行了一些测试。我是这样做的:
1) 设置一个基本的 HTML 页面,在 中带有一个空<style>
标签,他在底部的标签中<head>
提供了一个简单的示例:<script>
<body>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Performance test</title>
<style>
/**/
</style>
</head>
<body onload="onLoad()">
<div class="container"></div>
<script>
function onLoad() {
var now = new Date().getTime();
var page_load_time = now - performance.timing.navigationStart;
console.log("User-perceived page loading time: " + page_load_time);
}
</script>
</body>
</html>
2) 填充div.container
HTML 的负载。就我而言,我去了 html-ipsum.com(没有广告的意图),复制了每个样本,将它们全部缩小,然后复制了很多次。我最终的 HTML 文件是1.70 MB,并且div.container
有33264 个后代(直接与否;我通过调用发现console.log(document.querySelectorAll('.container *').length);
)。
3) 我在最新的 Firefox 和 Chrome 中运行了这个页面 10 次,每次都有一个空缓存。
以下是没有可怕的 CSS 规则集的结果(以毫秒为单位):
Firefox :
1785
1503
1435
1551
1526
1429
1754
1526
2009
1486
Average : 1600
Chrome :
1102
1046
1073
1028
1038
1026
1011
1016
1035
985
Average : 1036
(如果您想知道为什么这两者之间存在如此大的差异,我在 Firefox 上提供了更多扩展。我让它们继续运行是因为我认为让测试环境更加多样化会很有趣。)
<style>
4)在空标签中添加我们要测试的CSS :
html:before, html:after,
body:before, body:after,
div:before, div:after,
p:before, p:after,
ul:before, ul:after,
li:before, li:after,
h1:before, div:after,
strong:before, strong:after,
em:before, em:after,
code:before, code:after,
h2:before, div:after,
ol:before, ol:after,
blockquote:before, blockquote:after,
h3:before, div:after,
pre:before, pre:after,
form:before, form:after,
label:before, label:after,
input:before, input:after,
table:before, table:after,
thead:before, thead:after,
tbody:before, tbody:after,
tr:before, tr:after,
th:before, th:after,
td:before, td:after,
dl:before, dl:after,
dt:before, dt:after,
dd:before, dd:after,
nav:before, nav:after {
content: '';
}
……然后重新开始。这里我指定页面中使用的每个标签,而不是*
(因为它本身是反性能的,我们只想监视伪元素触发)。
所以,这里是触发了所有伪元素的结果(仍以毫秒为单位):
Firefox :
1608
1885
1882
2035
2046
1987
2049
2376
1959
2160
Average : 1999
Chrome :
1517
1594
1582
1556
1548
1545
1553
1525
1542
1537
Average : 1550
根据这些数字,我们可以得出结论,在每个伪元素上声明时,页面加载确实更慢(大约 400-500 毫秒)content: ''
。
现在,剩下的问题是:考虑到使用的测试页面相对较大,我们可以在这里看到的额外加载时间是否有意义?我想这取决于网站/项目的大小,但如果他们愿意,我会让更多有网络性能知识的人在这里发表意见。
如果您运行自己的测试,也请随时在此处发布您的结论,因为我对阅读它们非常感兴趣 - 我想我不会是唯一的。