水了好几天的日记了,居然忘了最重要的YY环节…
动画帧和帧率
动画是由一帧一帧构成的。帧可以理解为是动画过程的一张张照片。
动画的性能(视觉上的卡顿程度)与帧率有关,也就是1s钟内有多少帧。60fps表示1s钟有60帧。
我们一般使用的显示器刷新率是60Hz,也就是1s钟刷新60次。对于人眼来说就是1s钟看到了60张照片,由于人眼的视觉暂留使得两张照片得以连贯过渡,从而形成动画。说成帧率的话也就是60fps,因而60fps是所有web动画追求的极致。
通常来说动画如果低于30fps将无法接受。强调动画性能在某种程度上就是获得更高的帧率。
帧绘制
那么在web中,每一帧的绘制流程是怎样的呢?
- javascript执行(function call)
- 计算需要被加载到节点上的样式结果(Recalculate style–样式重计算)
- 为每个节点生成图形和位置(Layout–回流和重布局)
- 将每个节点填充到图层中(Paint Setup和Paint–重绘)
- 组合图层到页面上(Composite Layers–图层重组)
动画性能优化的核心也就是缩小每帧绘制所需要的时间,尽量在1/60s内完成,从而达到60fps。
上面的步骤有些是可以省略的,优化点就是去省略或者压缩每个点所需的时间。
如变换( transform )和透明度( opacity )的改变就不会触发2、3、4过程。