CSS動畫性能非常好。雖然是簡單的幾個動畫元素,如果你的代碼沒有讓動畫表現(xiàn)出其意義或者說使用頁面變得更為復(fù)雜,網(wǎng)站的用戶可能很快就會發(fā)現(xiàn),并且有可能讓用戶覺得惡心。反而得不到相應(yīng)的好評。在這篇文章中,我將介紹瀏覽器開發(fā)者工具的一些有用的功能,這些功能將能幫助你…
CSS動畫性能非常好。雖然是簡單的幾個動畫元素,如果你的代碼沒有讓動畫表現(xiàn)出其意義或者說使用頁面變得更為復(fù)雜,網(wǎng)站的用戶可能很快就會發(fā)現(xiàn),并且有可能讓用戶覺得惡心。反而得不到相應(yīng)的好評。
在這篇文章中,我將介紹瀏覽器開發(fā)者工具的一些有用的功能,這些功能將能幫助你檢查出你的CSS動畫在渲染引擎下會發(fā)生些什么。這樣,當(dāng)你的動畫看起來有點卡(幀率圖有點波濤洶涌),你會找到地應(yīng)的方法知道為什么為會這樣以及如何解決它。
調(diào)試CSS性能的開發(fā)者工具
你的動畫需要達到60fps(每秒幀數(shù)),這樣動畫在瀏覽器中運行才會流暢,反之,幀率越低,你的動畫就越糟糕。這也意味著瀏覽器沒有超過16ms每幀的工作。但在這期間它做什么?你又是怎么知道你的瀏覽器是否跟上所需的幀率?
我認(rèn)為評估一個動畫的質(zhì)量好壞沒有什么比用戶體驗時的感覺要更好。然而,現(xiàn)代瀏覽器開發(fā)者工具也并不是完全100%的可靠,不過慶幸的是,瀏覽器開發(fā)者工具也越來越強大,它可以幫助你編輯和調(diào)試你自己的代碼。
當(dāng)你需要檢查幀率和CSS動畫表現(xiàn)時,瀏覽器開發(fā)者工具也是真實的。接下來介紹如何它們是如何工作的。
Firefox瀏覽器管理性能工具
在這篇文章中,我使用Firefox性能工具。另一個競爭對手Chrome也有類似的性能工具。你可以根據(jù)自己的習(xí)慣選擇自己喜歡的。因為這兩個瀏覽器都提供了強大的性能特性。
選擇其中的一個操作打開Firefox開發(fā)者工具:
在你的Web頁面任何地方點擊鼠標(biāo)右鍵并選擇菜單中的檢查元素
如果你喜歡操作鍵盤快捷鍵的話,在Window系統(tǒng)上可以同時按下Ctrl + Shift + l,在Linux或OS X系統(tǒng)中可以同時按下Cmd + Opt + l
接下來選擇Performance選項。在這里,你會發(fā)現(xiàn)有一個按鈕,可以讓你開始記錄你的網(wǎng)站的性能:
按下這個按鈕,等待幾秒鐘或在頁面上執(zhí)行一些操作。當(dāng)你完成了,點擊停止記錄性能按鈕:
在這一瞬間Firefox幫你組織了良好的數(shù)據(jù),這些數(shù)據(jù)將幫助你理解你的代碼問題所在。
Firefox記錄性能的面板看起來像下圖這樣:
Waterfall完美幫你檢測CSS的transition和animation有關(guān)問題。其他部分是Call Tree和JS Flame Chart,你可以使用它來找出你的JavaScript代碼中存在的瓶頸。
在Waterfall頂部有一個總結(jié)和詳細的分析。在兩者中,采用不同的顏色塊來代表對應(yīng)的數(shù)據(jù):
黃色(Yellow)塊是JavaScript操作渲染
紫色(Purple)塊是指計算HTML元素的CSS樣式(計算方式)和頁面布局(布局)。瀏覽器對布局的操作是相當(dāng)?shù)陌嘿F的,所以如果你的動畫屬性包括重復(fù)布局(也稱為回流,比如margin、padding、top和left等)的屬性,結(jié)果需要重新計算
綠色(Green)塊是指重新繪制元素或者更多的位圖(重繪)。動畫中使用到比如color、background-color、box-shadow等屬性就會涉及到重繪操作。這可能是讓動畫緩慢的原因,也將給用戶糟糕的體驗
你也可以過濾你想檢查的數(shù)據(jù)類型。例如,我只對CSS的數(shù)據(jù)感興趣,那么就可以通過單擊在屏幕左上角的過濾器圖標(biāo),選擇你感興趣的。
Waterfall下的大綠色塊代表幀率上的信息。
看起來高表示是健康的,但最重要的是,他們是一致的,也就是說沒有太多較深的差距。
讓我們用一個示例來說明。
性能工具的實際操作
這里有一個簡單的CSS動畫,使用@keyframes做的一個動畫,測試頁面的效果看起來像這樣:
紫色的矩形無限循環(huán)。
給div元素設(shè)置margin-left屬性,還是通過動畫來改變,@keyframes用的代碼如下:
@keyframes slide-margin {
100% {
margin-left: 0;
}
}
得到的動畫性能數(shù)據(jù)看起來像這樣:
幀率視覺圖看起來有點參差不齊,動畫的平均幀率為44.82fps,這有點低。
同時整個動畫其間都在做布局和重繪動作。這些對于瀏覽器來說都是昂貴的,而且在瀏覽器中都是主線程執(zhí)行,對性能產(chǎn)生負(fù)面影響。
最后,如果你訪問檢查器(Inspector)工具,點擊動畫(Animation)選項和把鼠標(biāo)懸浮在動畫名上面,將會有一個彈框出來,這個彈框?qū)@示當(dāng)前動畫所有的信息。如果你的動畫是優(yōu)化的,會有一條消息說明事實。在這種情況下,沒有信息:
現(xiàn)在,我要改變我的代碼,在@keyframes中使用translate3d()這個屬性來替代margin-left,并且讓瀏覽器讓錄整個過程:
@keyframes slide-three-d {
100% {
transform: translate3d(0, 0, 0);
}
}
重新記錄的性能面板看起來像下圖:
現(xiàn)在幀率很高(56.83fps),而且Waterfall也沒有昂貴的布局和重繪操作。
同樣的,如果你打開瀏覽器開發(fā)工具中的檢測(Inspector)選項,進入動畫面板并且將鼠標(biāo)懸浮在動畫的名稱上,你可以看到這樣的信息:
彈出的信息框告訴你了所有的動畫都是最優(yōu)的,這對你的網(wǎng)站訪客來說是個好消息。
動畫只有CSS的opacity、transform和filter
你可能聽說過這個建議,但也無防,這些建議值得我們再復(fù)習(xí)一遍:如果你想讓你的動畫能夠順利進行,動畫只對CSS的opacity、transform和filter操作。如果對每個都進行動畫,這對于你的瀏覽器而言壓力是很大的,而且在很少的時間內(nèi)執(zhí)行這些任務(wù)也是昂貴的,這也通常產(chǎn)生一個不好的結(jié)果。
瀏覽器的性能工具再次證實,重排和重繪的操作并不是你的好朋友。
然而,每個瀏覽器處理CSS屬性都有點不同。如果你想知道哪些CSS屬性會觸發(fā)瀏覽器重排和重繪操作,可以瀏覽CSS Triggers這個網(wǎng)站。特別是這些屬性被用于你的動畫中時,這些信息變得尤為重要。
為了確保高性能動畫,一個流行的方法就是強迫瀏覽器改變一些屬性的工作交給GPU來完成,使用瀏覽器的主線程的壓力變得更小些。這個流行的方法就是利用硬件加速。可以通過CSS屬性中的will-change、translateZ(0)或translate3d(0, 0, 0)這樣的黑魔法開啟硬件加速。這些技巧都可以正常工作,如果你避開使用這些技巧,會讓你的動畫變得更糟糕些。
液壓壩液壓壩http://ahyhhdb.com 銅陵廣告銅陵廣告http://www.tlyfgg.com 淘寶優(yōu)惠券淘寶優(yōu)惠券http://www.waquan666.com 無錫網(wǎng)站建設(shè)無錫網(wǎng)站建設(shè)http://b2533.com 食堂外包食堂外包http://www.shhkcy.com/ 六安婚紗攝影http://www.suhanphoto.com/