美文网首页
回流与重绘

回流与重绘

作者: JaniceZD | 来源:发表于2023-04-25 22:54 被阅读0次

写在前面

在讨论回流(重排)与重绘之前,先了解具体的浏览器解析渲染机制:

  • 解析HTML,生成 DOM 树,解析CSS,生成 CSSOM
  • DOM 树和 CSSOM 树结合,生成渲染树 (Render Tree
  • 布局(Layout):根据渲染树将 DOM 节点树每一个节点布局到屏幕上的正确位置
  • 绘制(Painting):绘制所有节点,为每一个节点适用对应的样式,绘制到屏幕上

在页面初始渲染阶段,回流不可避免的触发,可以理解成页面一开始是空白的元素,后面添加了新的元素使页面布局发生改变。

回流 (Reflow)

回流(重排):当渲染树中的元素的布局(如:尺寸、位置)发生改变时,重新生成布局,重新排列元素。

回流的触发条件
  • 页面首次渲染
  • 浏览器窗口大小发生改变
  • 添加/删除可见的DOM元素
  • 改变元素位置
  • 改变元素尺寸,比如边距、填充、边框、宽度和高度等
  • 改变元素内容,比如文字数量等
  • JS获取Layout属性值(offsetLeftscrollTopgetComputedStyle等)

重绘 (Repaint)

重绘:当渲染树中的元素外观(如:颜色、背景、visibility)发生改变,不影响布局时,产生重绘。

注意:回流必将引起重绘,而重绘不一定会引起回流

重绘的触发条件
  • 颜色的修改
  • 文本方向的修改
  • 阴影的修改
  • visibility
  • background
  • 等等……

如何避免触发回流和重绘

  • 避免频繁使用 style,而是采用修改 class 的方式。
  • 将动画效果应用到 position 属性为 absolutefixed 的元素上。
  • 避免使用 CSS 表达式(例如:calc())。
  • 避免频繁操作 DOM,创建一个DocumentFragment,在它上面应用所有 DOM 操作,最后再把它添加到文档中。
  • 对于 resizescroll 等进行防抖/节流处理。
  • 使用CSS3硬件加速,可以让transformopacityfilters 这些属性不会引起回流重绘

也可以先将元素设置为 display: none,操作结束后再把它显示出来。因为在 display 属性为 none 的元素上进行的 DOM 操作不会引发回流和重绘。(这个过程称为离线操作)

参考链接

相关文章

  • 浏览器的回流与重绘 (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...

  • 前端一些细节

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

网友评论

      本文标题:回流与重绘

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