内容提要
浏览器渲染页面的流程包括html解析、样式计算、布局、分层、绘制、分块、光栅化和绘画等多个阶段。解析过程中,css不会阻塞html解析,而js会阻塞html解析。渲染完成后得到dom树和cssom树,然后进行样式计算、布局和分层。主线程为每个层生成绘制指令集,合成线程进行分块和光栅化,最后生成位图并绘画。reflow是重新计算布局树,repaint是重新计算绘制指令。transform的效率高因为它只影响渲染流程的最后一个阶段。
关键要点
-
浏览器渲染页面的流程包括多个阶段:html解析、样式计算、布局、分层、绘制、分块、光栅化和绘画。
-
css解析不会阻塞html解析,而js会阻塞html解析。
-
解析完成后生成dom树和cssom树,进行样式计算、布局和分层。
-
主线程为每个层生成绘制指令集,合成线程进行分块和光栅化,最终生成位图并绘画。
-
reflow是重新计算布局树,repaint是重新计算绘制指令。
-
transform的效率高,因为它只影响渲染流程的最后一个阶段。
延伸问答
浏览器渲染页面的主要阶段有哪些?
浏览器渲染页面的主要阶段包括html解析、样式计算、布局、分层、绘制、分块、光栅化和绘画。
为什么CSS解析不会阻塞HTML解析?
因为浏览器在解析HTML时,会启动预解析线程下载外部CSS文件,CSS解析在预解析线程中进行,不会影响HTML的解析。
JavaScript如何影响HTML解析?
JavaScript会阻塞HTML解析,因为主线程在遇到script标签时会暂停HTML解析,等待JS文件下载和执行完成后才能继续。
什么是reflow和repaint,它们有什么区别?
Reflow是重新计算布局树,而repaint是重新计算绘制指令。Reflow通常在布局信息改变时触发,而repaint在可见样式改变时触发。
transform为什么被认为效率高?
因为transform只影响渲染流程的最后一个绘制阶段,不会影响布局和绘制指令,因此其变化不会阻塞主线程。
浏览器如何处理分层以提高渲染效率?
浏览器通过对布局树进行分层,将每个层的改变限制在该层内,从而提高后续处理的效率。