【问题标题】:Simple Explanation of CSS/HTML/JS dependencies in browser浏览器中 CSS/HTML/JS 依赖的简单说明
【发布时间】:2020-10-14 00:39:48
【问题描述】:

我只是想验证我是否正确理解了这一点。当浏览器收到一个 HTML 页面时,它会

  1. 开始将 HTML 解析为 DOM,并将任何样式标签解析为 CSSOM。

  2. 在遇到任何资源请求时,将这些请求发送到服务器。

  3. 遇到内联或外部<script> 标记时停止将 HTML 解析为 DOM

    • 例外:如果外部脚本标签包含 async 关键字,它将在 HTML 完全解析并完全构建 DOM 后运行。
  4. 任何脚本,无论是内联的还是外部的,只有在检查了整个 HTML 页面的任何样式信息并且该样式信息已转换为 CSSOM 后才会开始执行。

如果我应该对这些规则添加任何内容,请告诉我。
或者,如果您有很好的资源来了解依赖关系以及如何优化它们,请分享。

【问题讨论】:

  • 我认为内联脚本会立即执行,除非它们具有 ASYNC 或 DEFER 属性。
  • 整个过程几乎肯定比这个简短的总结要复杂得多。
  • Barmar 我敢肯定,如果我们想详细讨论浏览器,这个过程会更加复杂,但我真的认为应该有一些直截了当的答案来解决在解析过程中如何构建依赖关系?
  • 查看 chrome 中的性能选项卡,它会告诉你到底发生了什么......没有任何停止
  • @Alohci,据我所知,将 HTML 解析到 DOM 和检查 HTML 中的 CSS 样式以解析到 CSSOM 之间是有区别的。我猜它类似于'HTML解析器可以在提取脚本资源时继续标记HTML文件,但它不会在当前脚本标记之后为标记构造节点对象。但是,如果这些标签是样式,它会将它们传递给 CSSOM 构造函数,该构造函数与 DOM 构造函数异步运行。一旦所有的 CSSOM 构建完成,脚本标签就可以执行了。'

标签: javascript dom browser cssom


【解决方案1】:

似乎你已经涵盖了所有内容。您可以通过以下链接了解有关并发模型和事件循环的更多详细信息。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop#:~:text=A%20JavaScript%20runtime%20uses%20a,starting%20with%20the%20oldest%20one.

【讨论】:

  • 这个问题更多是关于在浏览器进程中阻塞而不是javascript引擎,我认为你的链接涵盖了这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 2020-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多