html - CSSOM 和 DOM 创建是异步的吗?

标签 html css dom web cssom

我读到 CSSOM 创建是网页性能方面的瓶颈。但似乎有一些解决方法,比如将 media 属性添加到样式表链接。我试图了解如何优化我的网络应用程序并遇到了这个非常有趣的 link但无法理解 CSSOM 和 DOM 创建的顺序。

Here我看到一些关于异步加载 CSS 文件的引用,但答案不是很清楚。当然,这是关于加载而不是对象模型创建。

我的问题是:CSSOM 创建和 DOM 创建是并行发生还是依次发生?

最佳答案

是的,CSSOM 和 DOM 的创建是异步发生的,这只是合乎逻辑的。我建议您从 Google Web fundamentals 开始像rendering这样的主题进行了深入的讨论和解释。

  1. DOM 构建在浏览器从网络请求中收到网页或从磁盘读取网页时立即开始。它开始“解析”html 并将其“标记化”,创建一个我们知道的节点的 DOM 树。

  2. 在解析和构建 DOM 树时,如果它在 head 或任何其他部分遇到链接标记,则引用外部样式表。 (来自docs)

Anticipating that it will need this resource to render the page, it immediately dispatches a request for this resource,...

  1. CSS 规则再次被标记化并开始形成我们所说的 CSSOM。当整个网页被解析并然后应用于 DOM 树中的节点时,最终生成 CSSOM 树。

When computing the final set of styles for any object on the page, the browser starts with the most general rule applicable to that node (e.g. if it is a child of body element, then all body styles apply) and then recursively refines the computed styles by applying more specific rules - i.e. the rules “cascade down”.

我们都注意到,在连接速度较慢时,首先加载 DOM,然后应用样式,网页看起来就完成了。这是因为这个根本原因 - CSSOM 和 DOM 是独立数据结构。

我希望它能回答您的问题并为您指明正确的方向。

PS:再次强烈推荐通读Google web performance fundamentals以获得更好的见解。

关于html - CSSOM 和 DOM 创建是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38842675/

相关文章:

c# - system.web.ui.webcontrols.textbox不包含 "lines"的定义

php - 使用来自 MySQL 的图像 URL 显示图像

javascript - 如何使导航中的某些链接不隐藏在移动设备上? Bootstrap 3

javascript - HTML + Javascript : can't get all instances from two elements at once?

html - 如何在背景透明时为页面设置默认背景颜色

html - 在具有不同编号的新 div 上应用 css 类

html - 如何验证 html 电子邮件模板?

html - 如何在移动设备上显示不同的图像风格

android - 如何使用 Android 上的 DocumentBuilder DOM 解析器解析带有包含非拉丁 Unicode 字符的标签名称的 XML

javascript - 如何使用 DOM 生成小计金额