美文网首页视觉艺术
浏览器的绘制页面、回流与重绘

浏览器的绘制页面、回流与重绘

作者: 鹤仔z | 来源:发表于2020-02-10 22:12 被阅读0次

浏览器如何绘制页面

虽然不同的浏览器有着不同的内核,但是浏览器的渲染流程都是相似的:

构建DOM树 => 创建StyleRules => 构建Render树 => 布局Layout => 绘制Painting

  1. 构建DOM树:

    ​ 分析HTML,构建成DOM树。(每个DOM节点都有attach方法,用来接收样式信息,返回一个render对象,这些render对象最终会构建成一个Render树)

  2. 构建StyleRules:

    ​ 分析CSS文件以及DOM元素上的行内样式,生成样式树。

  3. 构建Render树:

    ​ 将DOM树和样式树对应起来,生成一个Render树。

  4. 布局:

    ​ 浏览器为Render树的每个节点都划分一个将要在页面中显示出来的区域。

  5. 绘制:

    ​ 调用每个Render树节点的paint方法,把他们绘制出来。一次页面的绘制就完成了。

webkit渲染引擎工作流程

回流与重绘

  1. 回流

    ​ render tree并不是一次就能构建成最终方案的。在render tree的构建过程中,如果遇到了元素的尺寸、布局、或者display的改变(影响到了页面的布局),就需要重新构建,这就叫回流。每个页面至少要经过一次回流,因为在页面第一次加载的时候要构建render tree。

    ​ 在回流的过程中,render tree受到影响的地方会被废弃,并被重新构造。完成回流后,浏览器会重新绘制这一重新构造的部分,这就叫做重绘

  2. 重绘

    ​ 顾名思义,重绘即重新绘制。当render tree中的一些元素只发生了外观的变化(不影响布局,例如:background-color),不会发生回流,并且浏览器重新绘制这一部分,称为重绘

  3. 回流与重绘的关系

    ​ 经过对上文的理解,相信大家已经多少有了一点答案:回流必定引起重绘,而重绘不一定引起回流。

小结

​ 这里简单的介绍了一下浏览器的渲染机制,没想到看似简单的网页居然要经过那么复杂的流程才能展现在大家的面前...

​ 是的,对于计算机来说,它依然很复杂,所以DOM操作的低效率一直被人们所诟病。任何网页中只要涉及到对DOM的频繁操作,一定会遇到严重的性能问题。所以在此之上,我们有很多方案来对它进行优化,在之后的章节中会有所详细的介绍。

相关文章

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

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

  • 22,重绘、回流

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

  • 浏览器的绘制页面、回流与重绘

    浏览器如何绘制页面 虽然不同的浏览器有着不同的内核,但是浏览器的渲染流程都是相似的: 构建DOM树 => 创建St...

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

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

  • 页面回流

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

  • css中的repaint和reflow

    页面设计中,不可避免的存在浏览器重绘repaint和回流reflow 介绍 repaint:针对某个元素进行重绘。...

  • 面经 之 Browser浏览器读后感

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

  • 浏览器渲染帧

    浏览器的绘制渲染过程可以总结为 一帧数据的渲染注意:浏览器并不是因为页面的重绘和回流才会进行数据帧的渲染,一般情况...

  • 页面重绘和回流以及优化

    页面重绘和回流以及优化 在讨论页面重绘、回流之前。需要对页面的呈现流程有些了解,页面是怎么把html结合css等显...

  • 回流与重绘

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

网友评论

    本文标题:浏览器的绘制页面、回流与重绘

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