(一)前言
在需要高頻互動的css動畫時候,我們就需要考慮使用css3 硬體加速。
首先,css3 硬體加速又叫做 gpu 加速,是利用 gpu 進行渲染,
減少 cpu 操作的一種優化方案。由於 gpu 中的 transform 等 css
屬性不會觸發 repaint,所以能大大提高網頁的效能。
現在,像chrome, firefox, safari, ie9+和最新版本的opera都支援硬體加速,當它們檢測到頁面中某個dom元素應用了某些css規則時就會開啟,最顯著的特徵的元素的3d變換。
(二)案例分析
首先我們來實現乙個小球動畫,我們先用left和top來控制位置,然後檢視其丟幀情況,然後我們再使用transform來實現一樣的效果, 然後對比兩次的效能報告
我們先給原始碼吧
這是通過left和top實現位移
這是通過translate實現位移
**就是上面,現在我們來看兩個的丟幀情況
我們可以看到因為left和top屬性會導致重繪,導致rending,而且每乙個步驟都有綠色柱狀圖,這是乙個效能代價很高的操作,也是產生丟幀的關鍵。而transform會直接使用硬體加速,在gpu中執行,繞開了軟體渲染。
(三)硬體加速原理
瀏覽器首先頁面解釋成dom輸,dom樹和css讓瀏覽器構建渲染樹,渲染書包含渲染物件 - 在頁面中需要渲染的元素,每乙個渲染物件被分配到乙個圖層中,每乙個圖層被更新到gpu,這裡的秘訣就在於通過transform的層會使用gpu渲染,因此不需要重繪,就像3d圖形一樣。這個轉換是單獨處理的。
當然,瀏覽器建立這種層級的條件有以下幾種
3d 或者 css的transform屬性
和 元素
css的filter屬性
覆蓋在其它元素之上的元素,比如通過z-index提公升層級
自然,不是所有的css都會在gpu執行,目前支援是以下幾種
transform
opacity
filter
因此,如果你動畫,考慮效能,建議用以上css3來實現。
(四)開啟硬體加速
可是在一些情況下,我們並不需要對元素應用3d變換的效果,那怎麼辦呢?這時候我們可以使用個小技巧「欺騙」瀏覽器來開啟硬體加速(transform hack)。
雖然我們可能不想對元素應用3d變換,可我們一樣可以開啟3d引擎。例如我們可以用transform: translate3d(0, 0, 0); 來開啟硬體加速 。
現在我們使用transform hack對上面修改left和top進行失幀情況
// 修改**
// 將style裡面的樣式修改如下
.container
對比圖
從圖中我們可以看到,重繪的代價雖然變低,但是和直接時候transform還是差太多。
(四)注意事項
大部分重要的問題都是關於記憶體。gpu處理過多的內容會導致記憶體問題。這在移動端和移動端瀏覽器會導致崩潰。因此,通常不會對所有的元素使用硬體加速。
在gpu渲染字型會導致抗鋸齒(-webkit-font-smoothing)無效。這是因為gpu和cpu的演算法不同。因此如果你不在動畫結束的時候關閉硬體加速,會產生字型模糊。
css硬體加速
你知道我們可以在瀏覽器中用css開啟硬體加速,使gpu graphics processing unit 發揮功能,從而提公升效能嗎?現在大多數電腦的顯示卡都支援硬體加速。鑑於此,我們可以發揮gpu的力量,從而使我們的 或應用表現的更為流暢。css animations,transforms 以及 ...
開啟GPU硬體加速的動畫屬性
並不是所有的css屬性都能觸發gpu的硬體加速,實際上只有少數屬性可以,比如下面的這些 對於transform,2d transform 動畫在開始和結束時發生的 repaint 操作,因此建議採用以下方式 example1 example2 通過 webkit transform transiti...
css實現硬體加速
就是將瀏覽器的渲染過程交給gpu處理,而不是使用自帶的比較慢的渲染器。這樣就可以使得animation與transition更加順暢。chrome,firefox,safari,ie9 以及最新的 opera都支援硬體加速,只要使用特定的css語句就可以開啟硬體加速 使用3d效果來開啟硬體加速 sp...