【干货】回流与重绘

作者: 果汁凉茶丶 | 来源:发表于2022-03-31 00:02 被阅读0次

一、页面构建过程

页面构建过程

从上面这个图上,我们可以看到,浏览器渲染过程如下:

  1. 解析HTML,生成DOM树,解析CSS,生成CSSOM树
  2. 将DOM树和CSSOM树结合,生成渲染树(Render Tree)
  3. Layout(回流):根据生成的渲染树,进行回流(Layout),得到节点的几何信息(位置,大小)
  4. Painting(重绘):根据渲染树以及回流得到的几何信息,得到节点的绝对像素
  5. Display:将像素发送给GPU,展示在页面上。(这一步其实还有很多内容,比如会在GPU将多个合成层合并为同一个层,并展示在页面中。而css3硬件加速的原理则是新建合成层)

二、生成渲染树过程

生成渲染树过程

为了构建渲染树,浏览器主要完成了以下工作:

  1. 从DOM树的根节点开始遍历每个可见节点。
  2. 对于每个可见的节点,找到CSSOM树中对应的规则,并应用它们。
  3. 根据每个可见节点以及其对应的样式,组合生成渲染树。
# 不可见节点
  • 一些不会渲染输出的节点,比如scriptmetalink
  • 一些通过css进行隐藏的节点。比如 display:none
  • Vue中,v-if 隐藏的节点
  • 但是:利用visibilityopacity隐藏的节点,还是会显示在渲染树上的,只是看不到,其实是真是存在的。

三、重绘

字面理解,重绘就是重新绘制,重新绘画,重新上色。
一个节点的颜色发生改变,导致渲染树需要重新绘制,这个过程叫重绘。我们通过构造渲染树和回流阶段,我们知道了哪些节点是可见的,以及可见节点的样式和具体的几何信息(位置、大小),那么我们就可以将渲染树的每个节点都转换为屏幕上的实际像素,这个阶段就叫做重绘节点
重绘一般不影响dom树,不一定引起回流。

四、回流reflow

将可见DOM节点以及它对应的样式结合起来,需要计算它们在设备视口(viewport)内的确切位置和大小,这个计算的阶段叫做回流。当页面的结构发生改变,导致dom树需要重新构建,如某个dom节点被删除,这必定会引起页面dom节点重新计算在视口中的位置,会触发回流。
dom树发生改变后,其下一步构建渲染树,也必定需要重新构建,页面重新渲染,也就是说,回流必定引起重绘。
回流过程比较麻烦,比较耗时,影响浏览器性能,应该尽量减少和避免。


五、减少回流

1.DOM的增删行为

比如你要删除某个节点,给某个父元素增加子元素,这类操作都会引起回流。如果要加多个子元素,最好使用 documentfragment

2.几何属性的变化

比如元素宽高/border/字体大小变了,这种直接会引起页面布局变化的操作也会引起回流。如果你要改变多个属性,最好将这些属性定义在一个class中,直接修改class名,这样只用引起一次回流

3.元素位置的变化

修改一个元素的左右marginpadding之类的操作,所以在做元素位移的动画,不要更改margin之类的属性,使用定位脱离文档流后改变位置会更好。

4.获取元素的偏移量属性

例如获取一个元素的scrollTopscrollLeftscrollWidthoffsetTopoffsetLeftoffsetWidthoffsetHeight之类的属性,浏览器为了保证值的正确也会回流取得最新的值,所以如果你要多次操作,最取完做个缓存。

5.页面初次渲染

初次渲染,也就是上图中的layout过程,这种的回流是必须的。

6.浏览器窗口尺寸改变

resize事件发生也会引起回流

相关文章

  • 【干货】回流与重绘

    一、页面构建过程 从上面这个图上,我们可以看到,浏览器渲染过程如下: 解析HTML,生成DOM树,解析CSS,生成...

  • 浏览器的回流与重绘 (Reflow & Repaint)

    浏览器的回流与重绘 (Reflow & Repaint) 写在前面 在讨论回流与重绘之前,我们要知道: 浏览器使用...

  • 浏览器的回流与重绘 (Reflow & Repaint)

    回流必将引起重绘,重绘不一定会引起回流 在讨论回流与重绘之前,我们要知道:浏览器使用流式布局模型 (Flow Ba...

  • 页面回流

    理解浏览器的重绘与回流(repaint&&reflow) 今天在做练习的时候,遇到了重绘与回流这个词,表示连个毛都...

  • 22,重绘、回流

    1,浏览器渲染机制 2,重绘 3,回流 > 重绘。 4,浏览器优化 5,减少重绘和回流

  • 2020前端面试问题及答案整理

    css的重绘与回流 重绘:当节点需要更改外观而不会影响布局。 回流:DOM结构的修改引发DOM几何尺寸变化的时候,...

  • 回流与重绘

    回流一定会触发重绘回流: DOM结构的增删改重绘: 颜色,背景, 字体等视觉上页面的改变 重绘不一定触发回流 如何...

  • 面试

    1. css的重绘与回流 重绘:当节点需要更改外观而不会影响布局。回流:DOM结构的修改引发DOM几何尺寸变化的时...

  • 面经 之 Browser浏览器读后感

    浏览器,原文请移步Browser | InterviewMap 回流和重绘 回流和重绘 - 掘金 存储 cooki...

  • 前端总结(后续继续更新)

    1,reflow和repaint:回流和重绘。回流:renderTree 重建。重绘:外观样式风格进行更新。(co...

网友评论

    本文标题:【干货】回流与重绘

    本文链接:https://www.haomeiwen.com/subject/znpujrtx.html