所以我根据@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
had 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 上有更多的扩展。我让它们打开是因为我认为让测试环境更加多样化会很有趣。)
4)在空白处添加我们要测试的CSS<style>
tag :
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: ''
在每个伪元素上.
现在,剩下的问题是:考虑到所使用的相对较大的测试页面,我们在这里可以看到的额外加载时间很重要?我想这取决于网站/项目的规模,但如果他们愿意的话,我会让更多了解网络性能的人在这里发表他们的意见。
如果您运行自己的测试,也请随意在这里发布您的结论,因为我对阅读它们非常感兴趣 - 而且我想我不会是唯一的一个。