浏览器渲染页面的流程

浏览器渲染流程如下图所示:

浏览器渲染页面的流程

渲染的流程如下:

1. 解析HTML文件,创建 DOM 树

  (自上而下,遇到任何样式(link、style)与脚本(script)都会阻塞(外部样式不阻塞后续外部脚本的加载)。)


2. 解析CSS文件,构建 CSSOM Tree(CSS规则树)

   优先级:浏览器默认设置<用户设置<外部样式<内联样式<HTML中的style样式;
3. 将CSS与DOM合并,构建渲染树(Render Tree)
4. reflow(重排):根据Render tree进行节点信息计算(Layout)
5. repaint(重绘):根据计算好的信息绘制整个页面(Painting)
理论上,每一次的dom更改或者css几何属性更改,都会引起一次浏览器的重排/重绘过程,而如果是css的非几何属性更改,则只会引起重绘过程。所以说重排一定会引起重绘,而重绘不一定会引起重排

  JS也参与DOM 树的构建,浏览器会先执行js再开始构建渲染树。所以说:JS脚本会阻塞Render tree的构建,阻塞了页面的渲染
我们可以在把script脚本放于body后面,来解决上面的问题。

 

浏览器渲染页面的流程

 

 

重排也叫回流:实际上,reflow的字面意思也是回流,之所以有的叫做重排,也许是因为更符合中国人的思维。标准文档之所以叫做回流(Reflow),是因为浏览器渲染是基于“流式布局”的模型,流实际就使我们常说的文档流,当dom或者css几何属性发生改变的时候,文档流会受到波动联动的去更改。
浏览器渲染页面的流程

 

 

 

重绘repaint:就是当页面中元素样式的改变并不影响它在文档流中的位置时,例如更改了字体颜色,浏览器会将新样式赋予给元素并重新绘制的过程称。

常见引起浏览器绘制过程的属性:

浏览器渲染页面的流程

 

重排一定会引起重绘,而重绘不一定会引起重排  那如何减少重排  如下:

1.避免设置大量的style属性  style属性改变结点样式,每设置一次会触发一次reflow重排(回流)  最好使用class属性

2.position属性 最好是设为absoulte或fixe  不会影响其他布局;

3.动画实现的速度的如果太慢 以1个像素为单位移动这样最平滑 大量消耗CPU,以3个像素为单位移动则会好很多

4.不要使用table布局,因为table中某个元素旦触发了reflow,那么整个table的元素都会触发reflow。

上一篇:[HTML5] Layout Reflow & thrashing


下一篇:[洛谷P3158] [CQOI2011]放棋子