Web浏览器在浏览网页时会生成许多树,包括DOM,CSSOM,Render,Layout树。 (布局树是否存在?或者布局树只是一个概念,它是一个具有布局属性的渲染树的概念吗?)
我正在检查Chromium源代码,我正在尝试查找每棵树的数据结构,以及它们的制作方式/时间/地点。
我在WebKit中找到了DOM树,它是一个树状结构。 按照源代码,看一些引用如:
我发现以下内容:
HTMLDocumentParser
通过函数HTMLDocumentParser::PumpTokenizer()
HTMLDocumentParser::ConstructTreeFromHTMLToken()
并使用HTMLTreeBuilder
构建DOM树</html>
结束标记时),执行函数Document::FinishedParsing()
,并触发DOMContentLoaded
事件。我认为CSSOM,渲染和布局树将在FinishedParsing
期间/之后制作,但我无法找到。
我认为一些重要的功能如下:(我发现他们使用TRACE_EVENT
函数在跟踪文件中记录重要内容)
Document::FinishedParsing()
Document::UpdateStyleAndLayoutTree()
Document::UpdateActiveStyle()
:制作CSSStyleSheet
和GlobalRuleset
Document::UpdateStyle()
:设置样式并附加到布局树我无法找到树的确切数据结构。 我正在寻找以下结构和功能:
CSSStyleSheet
StyleSheetCollection
CSSGlobalRuleSet
LayoutObject
Element::RecalcStyle
Element::RebuildLayoutTree
我在哪里可以找到这些树结构上的数据,以及我应该遵循的序列?
===加法=== 2017.08.18 16:46 KOREA
我分析了$CHROME/src/third_party/WebKit/Source/core/dom/Document.cpp$Document::FinishedParsing()
和Document::UpdateStyleAndLayoutTree()
中的代码。
我想到的内容如下:
Document::UpdateActiveStyle()
Document::UpdateStyle()
Document::NotifyLayoutTreeOfSubtreeChanges()
中制作
(我认为布局树是一个概念树,它与渲染树共享相同的结构)