前端動(dòng)畫“大比拼”

Javscript 動(dòng)畫(setTimeout、setInterval)
1.性能不佳,因?yàn)樾枰粩喃@取和修改Dom的布局,所以導(dǎo)致了大量頁面重排(repaint)
2.缺乏標(biāo)準(zhǔn),不同的庫使用了不同的API,導(dǎo)致即使是簡單的動(dòng)畫也有各不相同的實(shí)現(xiàn)方式,調(diào)整起來比較耗時(shí)
3.帶寬消耗,相對(duì)豐富的動(dòng)畫庫代碼量都很大,結(jié)果就是增加了http請(qǐng)求的大小,降低了頁面的載入時(shí)間

CSS3動(dòng)畫 (transition、animation)
優(yōu)勢:
1.通過優(yōu)化DOM操作,避免內(nèi)存消耗來減少卡頓
2.使用與 RAF(requestAnimationFrame) 類似的機(jī)制
3.強(qiáng)制使用硬件加速 (通過 GPU 來提高動(dòng)畫性能)
總的來書,css 動(dòng)畫相比與JS更輕量,性能更好,更易于實(shí)現(xiàn),同時(shí)也不必?fù)?dān)心缺乏標(biāo)準(zhǔn)和增加帶寬消耗的問題。
缺陷:
1.Transition 強(qiáng)制使用了 GPU 的硬件加速。導(dǎo)致瀏覽器一直處于高負(fù)荷運(yùn)轉(zhuǎn)的狀態(tài),這反而會(huì)讓動(dòng)畫變的卡頓。這在移動(dòng)瀏覽器上更為嚴(yán)重。(當(dāng)數(shù)據(jù)在瀏覽器的主線程和合成線程之間頻繁傳輸?shù)臅r(shí)候特別消耗性能,故容易導(dǎo)致卡頓。某些 CSS 屬性,不會(huì)受到影響。)
2.IE 10以下的瀏覽器不支持 transition。
3.transition 不能完全被 Javascript 控制(只能通過 Javascript 來觸發(fā) transition),因?yàn)闉g覽器不知道如何同時(shí)讓 Javascript 控制動(dòng)畫又同時(shí)優(yōu)化動(dòng)畫的性能。
4.不是所有屬性都能參與動(dòng)畫、動(dòng)畫緩動(dòng)效果太少、無法完全控制動(dòng)畫過程。

html5 動(dòng)畫(canvas、svg、webgl)
其中svg做為一種可縮放矢量圖形的實(shí)現(xiàn)是基于xml標(biāo)簽定義的,它有專門的animate標(biāo)簽來定義動(dòng)畫。而為canvas或者webgl實(shí)現(xiàn)動(dòng)畫則需要通過 requestAnimationFrame (簡稱 raf) 來定期刷新畫布。
RAF主要手段:
1.減少DOM樣式屬性查詢,DOM樣式屬性的查詢惠導(dǎo)致頁面重排,從而消耗性能,通過將屬性保存在JS變量中就可以避免在動(dòng)畫時(shí)去查詢,從而減少卡頓。
2.使用性能更好的 css transform替代改變絕對(duì)定位元素的定位屬性
3.在移動(dòng)設(shè)備上使用 3d 硬件加速,最簡單辦法就是添加-webkit-transform:translateZ(0),原因是移動(dòng)端的顯卡有很強(qiáng)的圖形渲染能力,而每個(gè)應(yīng)用的 webview 內(nèi)存卻是極其有限的。

RAF 相比setTimeout、setInterval的優(yōu)勢:
1、requestAnimationFrame 會(huì)把每一幀中的所有DOM操作集中起來,在一次重繪或回流中就完成,并且重繪或回流的時(shí)間間隔緊緊跟隨瀏覽器的刷新頻率,一般來說,這個(gè)頻率為每秒60幀。
2、在隱藏或不可見的元素中,requestAnimationFrame將不會(huì)進(jìn)行重繪或回流,這當(dāng)然就意味著更少的的cpu,gpu和內(nèi)存使用量。
**總的來說,requestAnimationFrame 是專門為實(shí)現(xiàn)高性能的幀動(dòng)畫而設(shè)計(jì)的一個(gè)API。 **

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容