前面的話
當我們透過某些行為(點擊、移動或滾動)觸發頁面進行大面積繪製的時候,瀏覽器往往是沒有準備的,只能被動使用CPU去計算與重繪,由於沒有事先準備,應付渲染夠嗆,於是掉幀卡頓。而CSS屬性will-change為web開發者提供了一種告知瀏覽器該元素會有哪些變化的方法,這樣瀏覽器可以在元素屬性真正發生變化之前提前做好對應的優化準備工作。這種優化可以將一部分複雜的計算工作提前準備好,使頁面的反應更為快速靈敏。本文將介紹CSS屬性will-change
準備知識
GPU是圖形處理器,專門處理和繪製圖形相關的硬體。 GPU是專為執行複雜的數學和幾何計算而設計的,使得CPU從圖形處理的任務中解放出來,可以執行其他更多的系統任務
所謂硬體加速,就是在計算機中把計算非常豐富的工作分配給專門的硬體來處理,減輕CPU的工作量
CSS的動畫、變形、漸變並不會自動觸發GPU加速,而是使用瀏覽器稍慢的軟體渲染引擎。在transition
、transform
和animation
的世界裡,應該卸載進程到GPU以加速速度。只有3D變形會有自己的layer,而2D變形則不會
【Hack】
使用translateZ()
或translate3d()
方法為元素添加沒有變化的3D變形,騙取瀏覽器觸發硬體加速。但是,代價是這種情況透過向它自己的層疊加元素,佔用了RAM和GPU的儲存空間,且無法確定空間釋放時間
語法
will-change
功能: 提前通知瀏覽器元素將要做什麼動畫,讓瀏覽器提前準備合適的優化設定
值: auto | < ;animateable-feature>
初始值: auto
應用於: 所有元素
繼承性: 無
應用於: 所有元素
繼承性: 無
相容性: IE13+、相容性: IE13+、相容性: IE13+、相容性: chrome49+、safari9.1+、IOS9.3+、Android52+ auto表示沒有特別指定哪些屬性會變化,瀏覽器需要自己去猜,然後使用瀏覽器經常使用的一些常規方法優化
<animateable-feature></animateable-feature>
可以是以下值:
scroll-position
表示開發者希望在不久後改變滾動條的位置或者使之產生動畫
contents
表示開發者希望在不久後改變元素內容中的某些東西,或使它們產生動畫
使用
【使用hover】
不要像下面這樣直接寫在預設狀態中,因為will-change會一直掛著:
.will-change { will-change: transform; transition: transform 0.3s; } .will-change:hover { transform: scale(1.5); }
可以讓父元素hover的時候,聲明will-change,這樣,移出的時候就會自動remove,觸發的範圍基本上是有效元素範圍<pre class="brush:php;toolbar:false">.will-change-parent:hover .will-change {
will-change: transform;
}
.will-change {
transition: transform 0.3s;
}
.will-change:hover {
transform: scale(1.5);
}</pre>
【使用javascript腳本】
.sidebar { will-change: transform; }
以上示例在樣式表中直接添加了will-change屬性,會導致瀏覽器將對應的優化工作一直保存在記憶體中,其實是不必要的。以下展示如何使用腳本正確地應用
will-change屬性
var el = document.getElementById('element'); // 当鼠标移动到该元素上时给该元素设置 will-change 属性 el.addEventListener('mouseenter', hintBrowser); // 当 CSS 动画结束后清除 will-change 属性 el.addEventListener('animationEnd', removeHint); function hintBrowser() { // 填写在CSS动画中发生改变的CSS属性名 this.style.willChange = 'transform, opacity'; } function removeHint() { this.style.willChange = 'auto'; }
【直接使用】
但是,如果某個應用在按下鍵盤的時候會翻頁,例如相簿或投影片一類,它的頁面很大很複雜,此時在樣式表中寫上will-change是合適的。這會讓瀏覽器事先準備好過渡動畫,當鍵盤按下的時候就能即看到靈活輕快的動畫
.slide { will-change: transform; }
注意事項
*&* 1、不要將will-change應用到太多元素:瀏覽器已經盡力嘗試去優化一切可以優化的東西了。有一些更強的優化,如果與will-change結合在一起的話,有可能會消耗很多機器資源,如果過度使用的話,可能導致頁面響應緩慢或者消耗非常多的資源*&**&* 2、有節制地使用:通常,當元素恢復到初始狀態時,瀏覽器會丟棄掉先前所做的最佳化工作。但如果直接在樣式表中明確聲明了will-change屬性,則表示目標元素可能會經常變化,瀏覽器會將最佳化工作保存得比之前更久。所以最佳實踐是當元素變化之前和之後透過腳本來切換will-change的值*&*3、不要過早應用will-change優化:如果頁面在效能方面沒什麼問題,則不要添加will-change屬性來榨取一丁點的速度。 will-change的設計初衷是作為最後的最佳化手段,用來嘗試解決現有的效能問題。它不應該被用來預防性能問題。過度使用will-change會導致大量的記憶體佔用,並會導致更複雜的渲染過程,因為瀏覽器會試圖準備可能存在的變化過程。這會導致更嚴重的效能問題
4、給它足夠的工作時間:這個屬性是用來讓頁面開發者告知瀏覽器哪些屬性可能會變化的。然後瀏覽器可以選擇在變化發生前事先做一些優化工作。所以給瀏覽器一點時間去真正做這些優化工作是非常重要的。使用時需要嘗試去找到一些方法提前一定時間獲知元素可能發生的變化,然後為它加上will-change屬性
更多CSS頁面渲染優化屬性will-change 相關文章請關注PHP中文網!

在本週的綜述中:Firefox獲得了類似鎖匠的力量,三星的Galaxy Store開始支持Progressive Web Apps,CSS Subgrid正在Firefox發貨

在本週的綜述中:Internet Explorer進入Edge,Google搜索控制台吹捧新的速度報告,而Firefox給出了Facebook&#039; s Notification

蓋茨比(Gatsby)進行了出色的處理和處理圖像。例如,它可以幫助您節省圖像優化的時間,因為您不必手動


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中