浏览器渲染的大致流程可分为: HTML 解析、样式计算、布局、分层、绘制、分块、光栅化、画。
其中HTML解析完成主要完成DOM树和CSSOM树的生成,其中会调用预解析线程去下载CSS、JS文件,并解析CSS和执行JS。
样式计算即根据DOM树和CSSOM树进行一个直接样式的计算,得到一个带有样式的DOM树(此DOM树包含display:none的节点)。
布局阶段,会进行一些样式补充计算(如一些百分比单位样式)及拿到节点的几何信息,得到一个布局树(注:布局树会将display:none的节点进行隔离,即不进入布局树)。
分层阶段,此阶段主要由浏览器自行操作,主要是将页面分为相互隔离的几个部分,方便后续的一些修改dom操作。
绘制阶段,此阶段主要就是生成绘制指令,告诉浏览器该怎么去画
分块阶段,即浏览器将整个页面分为若干个小块,提高运行效率
光栅化,即生成一块一块位图(位图简单来说就是什么位置该是什么样式)。
画,这一阶段就是合成线程根据位图生成指引信息,去指引浏览器的最终页面效果,然后由GPU完成屏幕成像。
最后, HTML 解析、样式计算、布局、分层、绘制在渲染主线程中完成,而分块、光栅化、画在合成线程中完成。