今天我們要來探討如何善用使用者的 GPU 資源,讓網頁的動畫更加順暢。我盡量讓內容簡單易懂,可以當一篇科普文章閱讀。
在我們討論之前,我們先來看看瀏覽器的渲染流程。這裡我畫了一張可愛的小圖
在這裡你可以看到每次你的動畫在跑, CPU 都會需要重新計算一次佈局,然後重新繪製,最後再合併圖層。這個過程會造成 CPU 的負擔,導致電腦發熱,耗電量增加,然後全台停電等等。這時候 CSS3 硬體加速就派上用場了。
其實 GPU 也不是一直在爽,它有時候也有在做事情。我們先來談談 GPU 厲害的點在哪裡。
GPU 厲害的是他會把在改變的元素獨立抽出來一個圖層,修改完再插回去。這樣就不用每次都重新繪製整個畫面,只需要繪製這個圖層就好了。這樣就可以大大減少 CPU 的負擔,讓動畫更加順暢。
但由此你也可以看出,一定要瀏覽器建立獨立圖層才能使用 GPU 加速。
以下這些情況瀏覽器會自動幫你建立獨立圖層:
這幾個 CSS 屬性會觸發建立獨立圖層:
但如果你沒有想要使用這些屬性但是你還是想要使用 GPU 加速,你可以用一些小手段來誘導瀏覽器開啟 GPU 加速。
.element {
transform: translateZ(0);
/**或著**/
transform: rotateZ(360deg);
transform: translate3d(0, 0, 0);
}
當使用3D硬體加速來提升動畫性能時,最好為元素添加一個z-index屬性,手動調整複合層的排序。這樣可以有效減少Chrome創建不必要的複合層,提高渲染性能,特別是在安卓手機上,優化效果很明顯。
過多地開啟硬體加速可能會消耗較多的內存,因此在什麼情況下啟用硬體加速,以及為多少元素啟用硬體加速,需要根據測試結果來決定。
GPU 渲染會影響字體的抗鋸齒效果。這是因為 GPU 和 CPU 具有不同的渲染機制,即使最終停用硬體加速,文字在動畫期間仍可能顯示得模糊不清。
今天我們講了一下 GPU 的運作原理,以及如何使用 CSS3 硬體加速。希望你們可以在開發網頁時,能夠善用 GPU 資源,讓網頁的動畫更加順暢。
或著是冬天快要到了,知道怎麼用安卓手機以及學校電腦製作暖暖包了吧w
沒有在開玩笑,這個就是一個不錯的暖暖包網頁。以上就是我今天的分享,歡迎在 Instagram 和 Google 新聞追蹤毛哥EM資訊密技,也歡迎訂閱我新開的YouTube頻道:網棧。
我是毛哥EM,讓我們明天再見。