。在我的情况下,我去了html-ipsum.com(没有广告意图),复制了每个样本,将它们全部压缩在一起,并重复了多次。 我的最终HTML文件大小为
1.70MB,
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上安装了更多的扩展。我让它们保留是因为我认为这样可以进一步多样化测试环境。)
4) 在空的
<style>
标签中添加我们要测试的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
根据这些数据,我们可以得出结论:在每个伪元素上声明“content: ''”时,页面加载确实会变慢(大约400-500毫秒)。
现在,剩下的问题是:考虑到使用的相对较大的测试页面,我们在这里看到的额外加载时间是否具有意义?我想这取决于网站/项目的规模,但如果他们愿意,我会让更了解网络性能的人在这里发表他们的意见。
如果您进行自己的测试,请随时在此处发布您的结论,因为我非常有兴趣阅读它们 - 而且我认为我不会是唯一一个。
*
)是否能够让浏览器做出某些优化的假设,因为现在它必须检查每个标签与样式列表相比较,而不是知道*
规则将适用于任何标签。此外,如果您没有使用扩展/附加组件,那么对于 FF 来说会更公平。无法确定扩展程序对页面执行了什么样的幕后操作,因此它们可能会混淆您的 FF 统计数据。 - ajp15243*
(或逐个元素)规则,并向所有尚未声明此属性的:before
和:after
规则添加content: '';
。听起来可行吗?我还没有使用Grunt等工具。 - neemzy*:before, *:after { content: ''; }
会导致当前 Chrome 出现意外行为,所以绝对不可行。 - neemzy