HTML渲染过程

85 阅读2分钟

关键渲染路径

网页在浏览器中渲染的过程叫做关键渲染路径。

渲染过程

  1. DOM树:HTML被解析成DOM(Document Object Model)树。
  2. CSSOM树:CSS解析成CSSOM(CSS Object Model)树。
  3. Render Tree:DOM树和CSSOM树结合,可见节点组成渲染树Render Tree。
  4. ReFlow回流:从渲染树根节点遍历,根据设备视口(viewport)计算节点的大小和位置。
  5. RePaint重绘:根据渲染树和回流得到的节点信息(大小和位置)转换成像素,传给GPU进行渲染。

回流和重绘发生的条件

  • 新增和删除可见的节点
  • 元素的位置发生变化
  • 元素的大小发生变化
  • 元素的内容发生变化,例如内容增加,图片尺寸增大等
  • 页面初始渲染
  • 浏览器的视口发生变化

回流一定会导致重绘,而重绘不一定会有回流。

浏览器的优化

关于元素的变化会先将变化存储到队列中,当到达一定时间/阈值后,才会清空队列,并一次性进行更改。但是如果要获取元素的信息时,会强制清空队列。

  • offsetTop\offsetLeft\offsetWidth\offsetHeight
  • scrollTop\scrollLeft\scrollWidth\scrollHeight
  • clientTop\clientLeft\clientWidht\clientHeight
  • ...还有很多

回流和重绘优化

  1. 将多次的dom和样式更改合并为一次(效果不明显,因为有浏览器优化)
  2. 将元素隐藏,更改,再显示(因为仅对可见节点进行回流/重绘,效果不明显,因为有浏览器优化)
  3. 对于多次获取同个元素的信息时,可以先将值存储起来,避免浏览器多次清空队列。

参考文档:

github.com/chenjigeng/…

前端性能优化之关键路径渲染优化

关键渲染路径