浏览器渲染原理

浏览器渲染原理

💡 原文中文,约2300字,阅读约需6分钟。
📝

内容提要

浏览器渲染页面的流程包括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只影响渲染流程的最后一个绘制阶段,不会影响布局和绘制指令,因此其变化不会阻塞主线程。

浏览器如何处理分层以提高渲染效率?

浏览器通过对布局树进行分层,将每个层的改变限制在该层内,从而提高后续处理的效率。

🏷️

标签

➡️

继续阅读