欢迎来到天天文库
浏览记录
ID:11273535
大小:299.97 KB
页数:8页
时间:2018-07-11
《浏览器的渲染原理简介》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、浏览器工作大流程 从上面这个图中,我们可以看到那么几个事: 1)浏览器会解析三个东西:·一个是HTML/SVG/XHTML,事实上,Webkit有三个C++的类对应这三类文档。解析这三种文件会产生一个DOMTree。·CSS,解析CSS会产生CSS规则树。·Javascript,脚本,主要是通过DOMAPI和CSSOMAPI来操作DOMTree和CSSRuleTree. 2)解析完成后,浏览器引擎会通过DOMTree和CSSRuleTree来构造RenderingTree。注意:·RenderingTree渲染树并不等同于DOM树,因为一些
2、像Header或display:none的东西就没必要放在渲染树中了。·CSS的RuleTree主要是为了完成匹配并把CSSRule附加上RenderingTree上的每个Element。也就是DOM结点。也就是所谓的Frame。·然后,计算每个Frame(也就是每个Element)的位置,这又叫layout和reflow过程。 3)最后通过调用操作系统NativeGUI的API绘制。 DOM解析 HTML的DOMTree解析如下:
3、>
ThisisanexampleWebpage.
"Apennysavedisapennyearned."4、
4、
"Wehavenothingtofearbutfearitself."
5、e:italic;} 于是我们的CSSRuleTree会是这个样子: 注意,图中的第4条规则出现了两次,一次是独立的,一次是在规则3的子结点。所以,我们可以知道,建立CSSRuleTree是需要比照着DOMTree来的。CSS匹配DOMTree主要是从右到左解析CSS的Selector,好多人以为这个事会比较快,其实并不一定。关键还看我们的CSS的Selector怎么写了。 注意:CSS匹配HTML元素是一个相当复杂和有性能问题的事情。所以,你就会在N多地方看到很多人都告诉你,DOM树要小,CSS尽量用id和class,千万不要过渡层叠下去
6、,…… 通过这两个树,我们可以得到一个叫StyleContextTree,也就是下面这样(把CSSRule结点Attach到DOMTree上): 所以,Firefox基本上来说是通过CSS解析生成CSSRuleTree,然后,通过比对DOM生成StyleContextTree,然后Firefox通过把StyleContextTree和其RenderTree(FrameTree)关联上,就完成了。注意:RenderTree会把一些不可见的结点去除掉。而 Firefox中所谓的Frame就是一个DOM结点,不要被其名字所迷惑了。 注:Webki
7、t不像Firefox要用两个树来干这个,Webkit也有Style对象,它直接把这个Style对象存在了相应的DOM结点上了。 渲染 渲染的流程基本上如下(黄色的四个步骤):1.计算CSS样式2.构建RenderTree3.Layout–定位坐标和大小,是否换行,各种position,overflow,z-index属性……4.正式开画 注意:上图流程中有很多连接线,这表示了Javascript动态修改了DOM属性或是CSS属性会导致重新Layout,有些改变不会,就是那些指到天上的箭头,比如,修改后的CSSrule没有被匹配到,等。 这
8、里重要要说两个概念,一个是Reflow,另一个是Repaint。这两个不是一回事。·Repaint——屏幕的一部分要重画,比如某个CSS
此文档下载收益归作者所有