以前有被问到一个问题,css3动画和js动画性能谁更好,为何。据个人经验,固然以为css3动画性能更好,至于为何一时还真答不上来,因此特地查了一下资料总结一波。css
同时CSS动画不触发layout或paint,在CSS动画或JS动画触发了paint或layout时,须要main thread进行Layer树的重计算,这时CSS动画或JS动画都会阻塞后续操做。html
在主线程中,维护了一棵Layer树(LayerTreeHost),管理了TiledLayer,在compositor thread,维护了一样一颗LayerTreeHostImpl,管理了LayerImpl,这两棵树的内容是拷贝关系。所以能够彼此不干扰,当Javascript在main thread操做LayerTreeHost的同时,compositor thread能够用LayerTreeHostImpl作渲染。当Javascript繁忙致使主线程卡住时,合成到屏幕的过程也是流畅的。
为了实现防假死,鼠标键盘消息会被首先分发到compositor thread,而后再到main thread。这样,当main thread繁忙时,compositor thread仍是可以响应一部分消息,例如,鼠标滚动时,加入main thread繁忙,compositor thread也会处理滚动消息,滚动已经被提交的页面部分(未被提交的部分将被刷白)。java
### 总结
回归到平常开发中,当有一个动画的需求时,首要考虑的确定是能不能尽量实现的问题。若是在CSS动画和JS动画都能实现的基础上才会要去根据上面总结的权衡哪一个性能更好的问题。总之,并不必定css动画就比js动画好,还得看具体的需求和业务场景。css3