web高性能动画及渲染原理

2017-12-24  本文已影响0人  mkv_me

如何实现动画?

webkit的渲染流程

webkit 分析性能

css style影响

style影响

浏览器渲染小结

硬件加速(GPU加速)

CPU vs GPU

Layer模型

Layer创建标准
  1. 拥有3d transform属性
  2. 使用animation,transition实现opacity,transform的动画
  3. video
  4. canvas
  5. Flash
  6. 使用CSS filters的元素
  7. z-index大于某个相邻节点的Layer的元素
为什么使用硬件加速快呢?
节省了哪些时间?
完美的Animation

对眼睛来说:60FPS更舒服更完美
约等于16.7ms内,我们准备好一帧的动画

  1. setTimeout(callback,1/60)
    依靠浏览器内置时钟更新频率,eg、IE8及以前更新间隔为15.6,setTimeout 16.7,它需要两个15.6ms触发。超过14.5ms,所以会出现丢帧的现象
    main thread队列
  2. requestAnimationFrame
    • 定义绘制每一帧的工作requestAnimationFrame(callback)

Layout

触发Layout

尽量不触发Layout,使用transform代替top,left的动画。

会触发三次layout
只触发一次layout

但是,如果是这样


1

我们可以这样改


2
介绍一个库

fastdom.js
在每一帧,先将读操作批量运行,在批量运行写操作

Layout小结

如何开发不会导致重拍

  1. 样式表越简单,重拍和重汇越快
  2. 重拍和重绘的DOM元素层级越高,成本就越高
  3. table元素的重排和重绘成本,要高于div元素
  4. 尽量不要把读操作和写操作,放在一个语句里
  5. 统一改变样式
  6. 缓存重排结果
  7. 离线DOM Fragment/clone
  8. 虚拟DOM React
  9. 必要的时候display:none不可见元素不影响重排重绘。visibility对重排影响不影响重绘

Paint

触发paint
paint的代价
减少不必的绘制
Paint小结

composite Layout

国外一个关于高性能动画研究

上一篇 下一篇

猜你喜欢

热点阅读