【发布时间】:2020-10-14 00:39:48
【问题描述】:
我只是想验证我是否正确理解了这一点。当浏览器收到一个 HTML 页面时,它会
-
开始将 HTML 解析为 DOM,并将任何样式标签解析为 CSSOM。
-
在遇到任何资源请求时,将这些请求发送到服务器。
-
遇到内联或外部
<script>标记时停止将 HTML 解析为 DOM- 例外:如果外部脚本标签包含 async 关键字,它将在 HTML 完全解析并完全构建 DOM 后运行。
-
任何脚本,无论是内联的还是外部的,只有在检查了整个 HTML 页面的任何样式信息并且该样式信息已转换为 CSSOM 后才会开始执行。
如果我应该对这些规则添加任何内容,请告诉我。
或者,如果您有很好的资源来了解依赖关系以及如何优化它们,请分享。
【问题讨论】:
-
我认为内联脚本会立即执行,除非它们具有 ASYNC 或 DEFER 属性。
-
整个过程几乎肯定比这个简短的总结要复杂得多。
-
Barmar 我敢肯定,如果我们想详细讨论浏览器,这个过程会更加复杂,但我真的认为应该有一些直截了当的答案来解决在解析过程中如何构建依赖关系?
-
查看 chrome 中的性能选项卡,它会告诉你到底发生了什么......没有任何停止
-
@Alohci,据我所知,将 HTML 解析到 DOM 和检查 HTML 中的 CSS 样式以解析到 CSSOM 之间是有区别的。我猜它类似于'HTML解析器可以在提取脚本资源时继续标记HTML文件,但它不会在当前脚本标记之后为标记构造节点对象。但是,如果这些标签是样式,它会将它们传递给 CSSOM 构造函数,该构造函数与 DOM 构造函数异步运行。一旦所有的 CSSOM 构建完成,脚本标签就可以执行了。'
标签: javascript dom browser cssom