我读到CSSOM创建是网页性能的瓶颈。但是似乎有一些方法可以解决这个问题,比如将media
属性添加到样式表链接中。我试图了解如何优化我的web应用程序,遇到了这个非常有趣的链接,但无法理解CSSOM和DOM创建发生的顺序。
这里我看到了一些关于异步加载CSS文件的参考,但是答案不是很清楚。当然,这是关于加载,而不是对象模型的创建。
我的问题是:CSSOM创建和DOM创建是并行的还是顺序的?
是的,CSSOM和DOM的创建是异步发生的,它只是逻辑上的。我建议你从Google Web fundamentals开始学习,这里深入讨论和解释了渲染等主题。
-
DOM构建在浏览器从网络请求接收网页或从磁盘读取网页时立即开始。它开始"解析"
html
并"标记"它,创建一个我们知道的节点DOM树。 -
在解析和构造DOM树时,如果在
head
或任何其他部分中遇到链接标记,则引用外部样式表。
预期它将需要这个资源来呈现页面,它立即调度对该资源的请求,…
- CSS规则再次被标记化,并开始形成我们所说的CSSOM。随着整个网页的解析,最后生成CSSOM树,然后将应用于DOM树中的节点。
当计算页面上任何对象的最终样式集时,浏览器从适用于该节点的最通用规则开始(例如,如果它是body元素的子元素,则应用所有body样式),然后通过应用更具体的规则递归地细化计算出的样式-即规则"级联"
我们都注意到,在慢速连接上,DOM首先加载,然后应用样式,网页看起来完成了。正是因为这个根本原因——CSSOM和DOM是独立于的数据结构。
我希望它能回答你的问题,并为你指明正确的方向。
PS:我再次强烈建议,阅读谷歌网页性能基础知识,以获得更好的见解。