c webkit html代码,webkit关键代码浏览——HTML解析

本文深入探讨了HTML解析的六个关键步骤,包括词法解析、语法分析、容错机制、DOM树构建和Render树构建。通过HTMLDocumentParser的调度,HTMLTokenizer进行词法解析,接着进行语法分析并创建DOM和Render节点。容错机制如开发元素堆栈确保错误处理,同时构建DOM和Render树。最后提到了查看DOM和Render树的方法,为理解整个解析过程提供了详细资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础概念就不多说了,直接进入正题,HTML解析这部分我主要关注了6点:1. 词法解析 2. 语法解析 3. 容错机制 4. DOM树构建 5. Render树构建 6. 查看DOM树和Render树

先上一个调用堆栈,该堆栈的调用过程基本囊括了前5点:

#0  WebCore::RenderObject::createObject

#1   WebCore::NodeRendererFactory::createRenderer

#2  WebCore::NodeRendererFactory::createRendererIfNeeded

#3  WebCore::Node::createRendererIfNeeded

#4  WebCore::Element::attach

#5  WebCore::executeTask

#6  WebCore::HTMLConstructionSite::executeQueuedTasks

#7  WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML

#8  WebCore::HTMLTreeBuilder::processStartTag

#9  WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken

#10 WebCore::HTMLTreeBuilder::constructTreeFromToken

#11 WebCore::HTMLDocumentParser::pumpTokenizer

#12 append

#13 WebCore::HTMLDocumentParser::append

#14 WebCore::DecodedDataDocumentParser::flush

#15 WebCore::DocumentWriter::end

#16 WebCore::DocumentLoader::finishedLoading

由此可见,加载完资源之后,由HTMLDocumentParser来总体调度HTML的解析。

1. 词法解析

首先进行的是词法解析,由HTMLDocumentParser::pumpTokenizer掉用WebCore::HTMLTokenizer::nextToken来完成。

这一篇文章对HTML的词法解析进行了非常详细的讲解,大家自行参考,我就不在赘述。

2. 语法分析,容错机制,DOM树构建,Render树构建

在词法分析的基础上,对词法分析的结果(HTMLToken)进行进一步的分析,然后创建相应的DOM节点,同时创建相应的Render节点。也就是说语法分析,容错机制,DOM树构建,Render树构建是一串连续的行为。

这篇文章和这篇文章对这个过程进行了比较全面的阐述,大家可以对照代码自行参考

值得一提的是,容错机制的一个典型例子是开发元素堆栈,它可以对一些错误的嵌套或者开闭进行纠错,该堆栈的另一个功能是确定元素的父子关系

3. 查看DOM树和Render树

我在这篇文章中已经有过介绍,这里不再赘述。

因为对于webkit这些关键代码,网上各位前辈的分析都比较详尽了,我再自己去写一遍也没啥意义。所以这里主要是按照我的学习框架来整合一些比较好的文章,希望大家看过之后对HTML的解析过程有比较完整和稍微深入的认识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值