美文网首页
浏览器的重绘与回流

浏览器的重绘与回流

作者: my木子 | 来源:发表于2021-05-10 20:19 被阅读0次

DOM操作为什么会影响性能

  • 在浏览器中,DOM 的实现和 ECMAScript 的实现是分离的。比如 在 IE 中,ECMAScript 的实现在jscript.dll中,而 DOM 的实现在 mshtml.dll 中;在 Chrome 中使用 WebKit 中的 WebCore 处理 DOM 和渲染,但ECMAScript 是在 V8 引擎中实现的,其他浏览器的情况类似。所以通过 JavaScript 代码调用 DOM 接口,相当于两个独立模块的交互。相比较在同一模块中的调用,这种跨模块的调用其性能损耗是很高的。但 DOM 操作对性能影响最大其实还是因为它导致了浏览器 的重绘(repaint)和回流(reflow)

浏览器渲染流程

  1. 解析HTML,构建DOM树
  2. 解析CSS,生成CSS规则树
  3. 合并DOM树和CSS规则,生成渲染树
  4. 布局渲染树(Layout/reflow),负责各元素尺寸、位置的计算
  5. 绘制渲染树(paint),绘制页面像素信息

重绘和回流的定义

  • 重绘(Repaint):改变元素外观属性,如:color,background-color 等。
  • 回流(Reflow):当渲染树中部分或全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为回流。
  • 回流必定会引发重绘,但重绘不一定会引发重绘
  • 重绘回流的代价:耗时,导致浏览器卡慢

导致回流的因素

  • 页面首次渲染(无法避免)
  • 元素尺寸或位置发生改变
  • 浏览器窗口大小发生改变(resize 事件发生时)
  • 元素内容变化(文字数量或图片大小等等)
  • 元素字体大小变化
  • 添加或者删除可见的DOM元素
  • 元素位置的改变,或者使用动画
  • 激活CSS伪类(例如::hover)
  • 查询某些属性或调用某些方法,scrollTo()clientWidthoffsetWidth

优化

CSS
  • 避免使用 table 布局;
  • 将需要多次回流的元素脱离文档流( absolute 或 fixed )
  • 避免使用CSS表达式(例如:calc())。
JS
  • 避免频繁操作样式,最好一次性重写style属性,或者将样式列表定义为class并一次性更改class属性;
  • 先为元素设置display: none,操作结束后再把它显示出来;
  • 如果需要创建多个 DOM 节点,可以使用 DocumentFragment 创建完后一次性的加入 document。
    let ul = document.querySelector("ul");
    let fragment = document.createDocumentFragment();

    for (let i = 0; i < 5; i++) {
      let li = document.createElement("li");
      li.innerHTML = i;
      fragment.appendChild(li);
    }
    ul.appendChild(fragment);

相关文章

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

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

  • 22,重绘、回流

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

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

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

  • 页面回流

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

  • 面经 之 Browser浏览器读后感

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

  • 回流和重绘——周分享

    浏览器的回流与重绘 (Reflow & Repaint) 浏览器使用流式布局模型 (Flow Based Layo...

  • 页面重绘重载优化

    三、优化(减少回流、重绘)浏览器本身的优化策略:浏览器会维护1个队列,把所有会引起回流、重绘的操作放入这个队列,等...

  • [转载]回流(reflow)和重绘(repaint)的理解

    写在前面 在讨论回流和重绘之前,我们要知道: 回流和重绘都是浏览器的行为。 浏览器使用流式布局模型(Flow Ba...

  • 回流和重绘

    在讨论回流与重绘之前,我们要知道: 浏览器使用流式布局模型 (Flow Based Layout)。 浏览器会把 ...

  • 你怎么也理解不了的回流和重绘

    浏览器的渲染过程 本文先从浏览器的渲染过程来从头到尾的讲解一下回流重绘,如果大家想直接看如何减少回流和重绘,优化性...

网友评论

      本文标题:浏览器的重绘与回流

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