浏览器渲染的过程

167 阅读2分钟

「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战」。

前言

之前写过一篇关于面试的文章 高频面试题-在浏览器中输入URL会发生什么,文中对在浏览器中输入URL会发生什么流程做了一个阐述,这篇文章主要对于其中的浏览器渲染的过程做一下详细的叙述

浏览器解析页面的流程

大致分为以下几个步骤

  1. 解析HTML,构建DOM树
  2. 解析CSS,生成CSS规则树
  3. 合并DOM树和CSS规则树,生成render树
  4. 布局render树(Layout/reflow),负责各元素尺寸、位置的计算
  5. 绘制render树(paint),绘制页面像素信息
  6. 浏览器会将各层的信息发送给GPU,GPU会将各层合成(composite),显示在屏幕上

browser_rending.png

生成 DOM 树

  • 解析HTML到构建DOM流程如下

图片.png

  1. 读取HTML的原始字节
  2. 将字节根据编码转换成字符串
  3. 将这些字符转换为不同的标记token,每个token都有自己独特的含义以及规则集
  4. 将token转为node对象
  5. 根据node对象构建DOM

生成 CSS 规则树

  • 构建 CSS 规则树的流程和 DOM 树类似,最终生成一个 CSSOM 图片.png

生成 render 树

  • 合并之前生成的DOM树和CSS规则树生成 render 树

browser_parse_rendertree.png

  • 渲染树只包括需要展示的节点,如果节点的样式是 display: none, 就不在渲染树中

渲染

  • 拿到渲染树之后就会开始渲染,根据样式定位页面元素,并绘制到页面上
  • 渲染过程中如果碰到了 <script> 就会发生阻塞,因为JS可能动态的修改DOM或者CSS,这一个过程就会引起重新的布局也叫回流(Reflow)或者重绘(Repaint)

重绘与回流

回流

  • 当页面中元素的规模尺寸、布局的样式发生变化时,浏览器会重新计算其位置和几何信息,这个计算过程就叫做回流

重绘

  • 涉及到改变某个元素的背景色、文字颜色、边框颜色等属性时,就会发生重绘,这些变更它不会影响页面布局,也就是说重绘可以单独发生

回流一定伴随着重绘,重绘却可以单独出现。回流的成本开销要高于重绘,在优化方案中劲量避免会引起回流的操作

参考文章

从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!

你不知道的浏览器页面渲染机制