以前有被問到一個問題,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