浏览器工作原理浅析byGhostZhang分析解析.ppt
《浏览器工作原理浅析byGhostZhang分析解析.ppt》由会员分享,可在线阅读,更多相关《浏览器工作原理浅析byGhostZhang分析解析.ppt(94页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、浏览器工作原理浅析TID Ghostzhang本PPT只是对内容的一个整理浏览器主要组件用户界面浏览器引擎渲染引擎网络UI 后端JS解释器数据存储渲染引擎Geckowebkit渲染引擎基本流程 构建dom树 -构建render树 -布局render树-绘制render树webkit渲染引擎主流程webkit使用 render树 这个名词来命名由渲染对象组成的树。元素的定位称为 布局。利用dom节点及样式信息去构建render树的过程为 attachmentGecko渲染引擎主流程Gecko称可见的格式化元素组成的树为 frame树,每个元素都是一个frame。元素的定位称为 回流。Gecko在
2、html和dom树之间附加了一层,这层称为 内容接收器,相当制造dom元素的工厂。解析流程浏览器引擎解析解析一个文档:即将其转换为具有一定意义的结构编码可以理解和使用的东西。解析的结果通常是表达文档结构的节点树,称为解析树或语法树。例如,解析“231”这个表达式,可能返回这样一棵树。数学表达式树节点解析解析可以分为两个子过程语法分析:对语言应用语法规则。词法分析:将输入分解为符号,符号是语言的词汇表基本有效单元的集合。解析器词法分析及语法分析原文件词法分析语法分析解析树从源文档到解析树解析器-文法上下文无关文法如果一个语言的文法是上下文无关的,则它可以用正则解析器来解析。对上下文无关文法的一个
3、直观的定义是,该文法可以用BNF来完整的表达。BNF:http:/en.wikipedia.org/wiki/Context-free_grammar从源文档到解析树解析器类型解析器类型分为两种:自顶向下解析:查看语法的最高层结构并试着匹配其中一个;自底向上解析:从输入开始,逐步将其转换为语法规则,从底层规则开始直到匹配高层规则。Webkit使用自底向上的解析器,Gecko使用自顶向下的解析器例子:解析“231”这个表达式词汇表:包括整数、加号及减号。语法:1.该语言的语法基本单元包括表达式、term及操作符2.该语言可以包括多个表达式3.一个表达式定义为两个term通过一个操作符连接4.操作
4、符可以是加号或减号5.term可以是一个整数或一个表达式例子:词汇表及语法的定义INTEGER:01909PLUS:MINUS:词汇表:包括整数、加号及减号。expression:term operation termoperation:=PLUS|MINUSterm:=INTEGER|expression语法:1.该语言的语法基本单元包括表达式、term及操作符2.该语言可以包括多个表达式3.一个表达式定义为两个term通过一个操作符连接4.操作符可以是加号或减号5.term可以是一个整数或一个表达式例子:解析过程1.第一个匹配规则的子字符串是“2”,根据规则5,它是一个term2.第二个匹
5、配的是“23”,它符合第2条规则一个操作符连接两个term,下一次匹配发生在输入的结束处。3.“231”是一个表达式,因为我们已经知道“23”是一个term,所以我们有了一个term紧跟着一个操作符及另一个term。4.“2”将不会匹配任何规则,因此是一个无效输入。HTML解析非上下文无关文法HTML 解析HTML文法定义HTML DTDDTD(Document Type Definition 文档类型定义)这一格式是用于定义SGML家族的语言,包括了对所有允许元素及它们的属性和层次关系的定义。DTD定义了HTML的解析语法HTML 解析树DOM树HTML解析器输出的树,也就是解析树,是由DO
6、M元素及属性节点组成的。DOM是文档对象模型的缩写,它是html文档的对象表示,作为html元素的外部接口供js等调用。http:/www.w3.org/DOM/DOMTR例子:DOM树Hello DOM这里所谓的树包含了DOM节点是说树是由 实现了DOM接口的元素 构建而成的,浏览器使用已被浏览器内部使用的其他属性的具体实现。解析算法hmtl不能被一般的自顶向下或自底向上的解析器所解析。原因是:1.这门语言本身的宽容特性2.浏览器对一些常见的非法html有容错机制3.解析过程是往复的,通常源码不会在解析过程中发生改变,但在html中,脚本标签包含的“document.write”可能添加标签
7、,这说明在解析过程中实际上修改了输入不能使用正则解析技术,浏览器为html定制了专属的解析器。Html5规范中描述了这个解析算法,算法包括两个阶段符号化及构建树。符号化符号化是词法分析的过程,将输入解析为符号,html的符号包括开始标签、结束标签、属性名及属性值。符号识别器识别出符号后,将其传递给树构建器,并读取下一个字符,以识别下一个符号,这样直到处理完所有输入。符号化:词法分析Hello world算法输出html符号,该算法用状态机表示。构建树Hello world构建树这一阶段的输入是符号识别阶段生成的符号序列。解析结束时的处理在这个阶段,浏览器将文档标记为可交互的,并开始解析处于延时
8、模式中的脚本这些脚本在文档解析后执行。文档状态将被设置为完成,同时触发一个load事件。Html5规范中有符号化及构建树的完整算法(http:/www.w3.org/TR/html5/syntax.html#html-parser)。浏览器容错浏览器都具有错误处理的能力,但是,另人惊讶的是,这并不是html最新规范的内容,就像书签及前进后退按钮一样,它只是浏览器长期发展的结果。解析器将符号化的输入解析为文档并创建文档,但不幸的是,我们必须处理很多没有很好格式化的html文档,至少要小心下面几种错误情况。标签未关闭标签嵌套错误标签错误遗漏标签太深的标签继承,最多只允许20个相同类型的标签嵌套。C
9、SS解析上下文无关文法CSS解析-词法comment/*/*+(/*/*+)*/num 0-9+|0-9*”.”0-9+nonascii/200-/377nmstart _a-z|nonascii|escapenmchar _a-z0-9-|nonascii|escapename nmchar+ident nmstartnmchar*CSS解析-语法ruleset:selector ,S*selector*S*declaration ;S*declaration*S*;selector:simple_selector combinator selector|S+combinator selec
10、tor ;simple_selector:element_name HASH|class|attrib|pseudo*|HASH|class|attrib|pseudo+;class:.IDENT;element_name:IDENT|*;attrib:S*IDENT S*=|INCLUDES|DASHMATCH S*IDENT|STRING S*;pseudo:IDENT|FUNCTION S*IDENT S*);“ident”是识别器的缩写,相当于一个class名,“name”是一个元素id(用“”引用)。CSS解析器Webkit使用自底向上的解析器,Gecko使用自顶向下的解析器它们都是
11、将每个css文件解析为样式表对象,每个对象包含css规则,css规则对象包含选择器和声明对象,以及其他一些符合css语法的对象。脚本解析javascript脚本web的模式是同步的,开发者希望解析到一个script标签时立即解析执行脚本,并阻塞文档的解析直到脚本执行完。如果脚本是外引的,则网络必须先请求到这个资源这个过程也是同步的,会阻塞文档的解析直到资源被请求到。这个模式保持了很多年,并且在html4及html5中都特别指定了。开发者可以将脚本标识为defer,以使其不阻塞文档解析,并在文档解析结束后执行。Html5增加了标记脚本为异步的选项,以使脚本的解析执行使用另一个线程。预解析Webk
12、it和Firefox都做了这个优化,当执行脚本时,另一个线程解析剩下的文档,并加载后面需要通过网络加载的资源。这种方式可以使资源并行加载从而使整体速度更快。需要注意的是,预解析并不改变Dom树,它将这个工作留给主解析过程,自己只解析外部资源的引用,比如外部脚本、样式表及图片。样式表样式表采用另一种不同的模式。理论上,既然样式表不改变Dom树,也就没有必要停下文档的解析等待它们,然而,存在一个问题,脚本可能在文档的解析过程中请求样式信息,如果样式还没有加载和解析,脚本将得到错误的值,显然这将会导致很多问题,这看起来是个边缘情况,但确实很常见。Firefox在存在样式表还在加载和解析时阻塞所有的脚
13、本,而chrome只在当脚本试图访问某些可能被未加载的样式表所影响的特定的样式属性时才阻塞这些脚本。渲染树的构造渲染引擎渲染树渲染树由元素显示序列中的可见元素组成,它是文档的可视化表示,构建这棵树是为了以正确的顺序绘制文档内容。Firefox将渲染树中的元素称为frames,webkit则用render或渲染对象来描述这些元素。一个渲染对象知道怎么布局及绘制自己及它的children。每个渲染对象用一个和该节点的css盒模型相对应的矩形区域来表示,正如css2所描述的那样,它包含诸如宽、高和位置之类的几何信息。盒模型的类型受该节点相关的display样式属性的影响。元素的类型也需要考虑,例如,
14、表单控件和表格带有特殊的框架。渲染树和DOM树的关系渲染对象和DOM元素相对应,但这种对应关系不是一对一的,不可见的Dom元素不会被插入渲染树,例如head元素。另外,display属性为none的元素也不会在渲染树中出现(visibility属性为hidden的元素将出现在渲染树中)。还有一些Dom元素对应几个可见对象,它们一般是一些具有复杂结构的元素,无法用一个矩形来描述。例如,select元素有三个渲染对象一个显示区域、一个下拉列表及一个按钮。当文本因为宽度不够而折行时,新行将作为额外的渲染元素被添加。根据css规范,一个行内元素只能仅包含行内元素或仅包含块状元素,在存在混合内容时,将会
15、创建匿名的块状渲染对象包裹住行内元素。渲染树和DOM树的关系一些渲染对象和所对应的Dom节点不在树上相同的位置,例如,浮动和绝对定位的元素在文本流之外,在两棵树上的位置不同,渲染树上标识出真实的结构,并用一个占位结构标识出它们原来的位置。样式计算创建渲染树需要计算出每个渲染对象的可视属性,这可以通过计算每个元素的样式属性得到。样式包括各种来源的样式表,行内样式元素及html中的可视化属性(例如bgcolor),可视化属性转化为css样式属性。样式表来源于浏览器默认样式表,及页面作者和用户提供的样式表,有些样式是浏览器用户提供的(浏览器允许用户定义喜欢的样式,例如,在Firefox中,可以通过在
16、Firefox Profile目录下放置样式表实现)。计算样式的一些困难计算样式的一些困难样式数据是非常大的结构,保存大量的样式属性会带来内存问题元素查找匹配的规则的优化应用规则涉及非常复杂的级联例子:复杂的选择符div div div div cont divdivdiv?Gecko-规则树、上下文树Gecko-规则树、上下文树Gecko用两个树用来简化样式计算规则树和样式上下文树webkit也有样式对象,但它们并没有存储在类似样式上下文树这样的树中,只是由Dom节点指向其相关的样式。例子:使用规则树计算样式上下文this is a big error this is also a very
17、 big errorerroranother error1.div margin:5px;color:black2.err color:red3.big margin-top:3px4.div span margin-bottom:4px5.#div1 color:blue6.#div2 color:green简化下问题,我们只填充两个结构color和margin,color结构只包含一个成员颜色,margin结构包含四边。例子:规则树(指向规则)this is a big error this is also a very big errorerroranother error1.div m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 浏览器 工作 原理 浅析 byGhostZhang 分析 解析
限制150内