FLIP 系统介绍:序
- Date
-
Takasaki Chidori
在开始介绍 FLIP 动画之前,让我们先简单了解一下浏览器的渲染过程。
渲染
渲染步骤包括样式、布局、绘制,在某些情况下还包括合成。在解析步骤中创建的 CSSOM 树和 DOM 树组合成一个渲染树,然后用于计算每个可见元素的布局,然后将其绘制到屏幕上。在某些情况下,可以将内容提升到它们自己的层并进行合成,通过在 GPU 而不是 CPU 上绘制屏幕的一部分来提高性能,从而释放主线程。

样式(Style)
简而言之,将 DOM 和 CSSOM 组合成一个渲染树。像<head>或者<script>之类的是不会出现在渲染树中的。
布局(Layout)
这一步的目的是在渲染树上运行布局以计算每个节点的几何体。
布局是确定呈现树中所有节点的宽度、高度和位置,以及确定页面上每个对象的大小和位置的过程。 第一次确定节点的大小和位置称为布局。随后对节点大小和位置的重新计算称为回流。
绘制(Paint)
在绘制或光栅化阶段,浏览器将在布局阶段计算的每个框转换为屏幕上的实际像素。绘画包括将元素的每个可视部分绘制到屏幕上,包括文本、颜色、边框、阴影和替换的元素(如按钮和图像)。 为了确保平滑滚动和动画,占据主线程的所有内容,包括计算样式,以及回流和绘制,必须让浏览器在 1 帧(16.67 毫秒)内完成。为了确保重绘的速度比初始绘制的速度更快,屏幕上的绘图通常被分解成数层。注意这里提到的一个概念
层。如果发生这种情况,则需要进行合成。
绘制可以将布局树中的元素分解为多个层。将内容提升到 GPU 上的层(而不是 CPU 上的主线程)可以提高绘制和重新绘制性能。有一些特定的属性和元素可以实例化一个层,包括
<video>和<canvas>,任何 CSS 属性为 opacity 、3D transform、will-change 的元素,还有一些其他元素。这些节点将与子节点一起绘制到它们自己的层上,除非子节点由于上述一个(或多个)原因需要自己的层。
合成(Compositing)
当文档的各个部分以不同的层绘制,相互重叠时,必须进行合成,以确保它们以正确的顺序绘制到屏幕上,并正确显示内容。