webkit关键代码浏览——HTML解析

   基础概念就不多说了,直接进入正题,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的解析过程有比较完整和稍微深入的认识

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值