Skip to content
标签
done
字数
1093 字
阅读时间
5 分钟

渲染过程

  1. html 解析,构建 dom 树
  2. css 解析,构建 cssom 树
  3. 将 dom 树和 cssom 树结合构建 render 树
  4. layout 布局:得到 render 树后,计算每个节点在浏览器中的位置和大小
    • 从渲染树的根节点开始遍历,采用盒子模型的模式来表示每个节点与其他元素之间的距离,从而确定每个元素在屏幕内的位置与大小
  5. Paint 绘图:遍历渲染树并调用渲染对象的 paint 方法将它们的内容显示在屏幕上,绘制使用 UI 基础组件(在绘制或光栅化阶段,浏览器将在布局阶段计算的每个框转换为屏幕上的实际像素
  6. Composite 合成: 浏览器将绘制好的像素进行合成,生成最终的页面。这个过程包括多个步骤,如合并图层、应用滤镜效果等

layout、paint 和 composite 阶段

在浏览器的渲染过程中,渲染引擎会按照一定的顺序执行布局(layout)、绘制(paint)和合成(composite)三个阶段,最终将页面内容呈现在屏幕上。

  1. Layout(布局)阶段

在布局阶段中,渲染引擎会计算出每个元素在页面中的准确位置和大小,以及它们相互之间的关系。渲染引擎会遍历 DOM 树,收集每个元素的尺寸、位置、边距、填充、边框等信息,并将它们转化成一个个盒模型。布局阶段的计算通常涉及多个因素,比如元素的尺寸、样式、位置等。

  1. Paint(绘制)阶段

在绘制阶段中,渲染引擎会将元素的盒模型转化为屏幕上的像素点,这个过程就是绘制。渲染引擎会按照布局阶段计算出的位置和大小,将每个元素绘制成屏幕上的一个个像素点,包括元素的背景、边框、文字等。这个阶段通常会调用底层的图形库完成绘制,如 Skia 等。

  1. Composite(合成)阶段

在合成阶段中,渲染引擎会将所有绘制好的像素点按照它们在 DOM 树中的顺序进行合成,以生成最终的图像。这个阶段通常是由操作系统或硬件加速完成,因为它需要将多个图层进行组合并生成最终的可视化输出。

值得注意的是,这三个阶段并不是互相独立的,它们之间相互影响,也可能相互交错。例如,当一个元素的布局信息发生变化时,渲染引擎需要重新计算该元素的位置和大小,从而触发重新绘制和合成操作。另外,为了提高渲染性能,渲染引擎可能会采用一些优化手段,如分层渲染、图像缓存等,以便在渲染过程中尽可能地减少不必要的计算和操作。

优化方案

优化渲染关键路径

优化页面渲染性能,减少页面白屏时间

优化 JS:JavaScript 文件加载会阻塞 DOM 树的构建,可以给< script >标签添加异步属性 async,这样浏览器的 HTML 解析就不会被 js 文件阻塞。
优化 CSS:浏览器每次遇到< link>标签时,浏览器就需要向服务器发出请求获得 CSS 文件,然后才继续构建 DOM 树和 CSSOM 树,可以合并所有 CSS 成一个文件,减少 HTTP 请求,减少关键资源往返加载的时间,优化渲染速度。

其他优化方案

  • html、css、js 文件压缩,删去多余字符(换行、注释、空格符等)
  • 图片加载优化(懒加载、雪碧图等
  • 浏览器缓存

参考

10分钟看懂浏览器的渲染过程及优化 - 掘金

渲染页面:浏览器的工作原理 - Web 性能 | MDN

贡献者

The avatar of contributor named as jiechen jiechen

页面历史

撰写