简析浏览器渲染机制

2017-04-16  本文已影响0人  swhzzz

浏览器渲染流程
1.浏览器解析
(1)浏览器解析HTML,构建DOM树
(2)浏览器解析css,构建CSS规则树
(2)解析JavaScript,通过DOM API和CSSOM API来操作DOM树和 CSS规则树

2.解析完成之后,浏览器将DOM树和CSS规则树构建为渲染树rendering tree
注意:

3.渲染

(1)计算CSS样式
(2)构建Render Tree
(3)Layout – 定位坐标和大小,是否换行,各种position, overflow, z-index属性 ……
(4)通过native GUI paint到页面

关于reflow和repaint

Reflow的成本比Repaint的成本高得多的多。DOM Tree里的每个结点都会有reflow方法,一个结点的reflow很有可能导致子结点,甚至父点以及同级结点的reflow。在一些高性能的电脑上也许还没什么,但是如果reflow发生在手机上,那么这个过程是非常痛苦和耗电的。
所以,下面这些动作有很大可能会是成本比较高的。

为此要尽量减少reflow和repaint
1)不一条一条地修改DOM的样式。与其这样,还不如预先定义好css的class,然后修改DOM的className。
2)把DOM离线后修改。如:
使用documentFragment 对象在内存里操作DOM
先把DOM给display:none(有一次reflow),然后你想怎么改就怎么改。比如修改100次,然后再把他显示出来。
clone一个DOM结点到内存里,然后想怎么改就怎么改,改完后,和在线的那个的交换一下。
3)不要把DOM结点的属性值放在一个循环里当成循环里的变量。不然这会导致大量地读写这个结点的属性。
4)尽可能的修改层级比较低的DOM。当然,改变层级比较底的DOM有可能会造成大面积的reflow,但是也可能影响范围很小。
5)为动画的HTML元件使用fixed或absolute的position,那么修改他们的CSS是不会reflow的。
6)不使用table布局。因为可能很小的一个小改动会造成整个table的重新布局。

本文参考自

陈皓-浏览器的渲染原理简介
Ilya Grigorik-渲染树构建、布局及绘制

上一篇 下一篇

猜你喜欢

热点阅读