Javascript 浏览器如何在<;之前构建渲染树/车身>;标记是否在DOM树中?

Javascript 浏览器如何在<;之前构建渲染树/车身>;标记是否在DOM树中?,javascript,dom,browser,rendering,Javascript,Dom,Browser,Rendering,我正在研究网络浏览器是如何工作的 我的理解如下: 一旦HTML资源到达,浏览器就会解析HTML并构建DOM树 当它遇到CSS导入的link元素时,它停止构建DOM树并构建CSSOM树 在构建CSSOM树之后,将构建DOM树 组合这些元素后,将生成渲染树 但由于DOM构造在遇到时停止,因此我们将放在之前,以在加载JS之前完成渲染树的构建 但这难道不意味着还不在DOM树中吗? 我看到的文章向我解释说,我们可以在不等待正在做什么的情况下完成渲染。我认为如果这是真的,那么构建渲染树时不需要等待完整的

我正在研究网络浏览器是如何工作的

我的理解如下:

  • 一旦HTML资源到达,浏览器就会解析HTML并构建DOM树
  • 当它遇到CSS导入的
    link
    元素时,它停止构建DOM树并构建CSSOM树
  • 在构建CSSOM树之后,将构建DOM树
  • 组合这些元素后,将生成渲染树
但由于DOM构造在遇到
时停止,因此我们将
放在
之前,以在加载JS之前完成渲染树的构建

但这难道不意味着
还不在DOM树中吗? 我看到的文章向我解释说,我们可以在不等待
正在做什么的情况下完成渲染。我认为如果这是真的,那么构建渲染树时不需要等待完整的DOM树,而只需要等待CSSOM树。因为浏览器可以在解析
之前进行浏览


或者它是否认识到唯一剩下的元素是
,而忽略它?

您的理解有点错误,但我将集中讨论关键点

首先,DOM不包含单独的开始和结束元素或标记。这对标记
{,}
创建一个名为
body
的元素。类似地,这对标记
{,}
创建了一个名为
span
的元素

一旦解析器遇到开始标记,就会创建元素并将其添加到DOM中。如果解析暂停,则可以呈现在该点之前创建的整个DOM—假设当时没有进行渲染阻止获取

至于结束标记,它们主要用于标识元素的结束位置,这样标记中的下一个元素或文本就不会添加为刚刚结束的元素的子元素

然而,
是一种特殊情况。如果解析器在
标记之后遇到标记或文本,解析器将通过将元素和文本作为body元素的子元素来“修复”DOM。这并不是说解析器完全忽略了
标记-如果注释节点紧跟在
标记之后,它将被添加为html元素的子元素,而不是body元素