摘要:硬件加速是指應(yīng)用的圖形性能對瀏覽器中的一些圖形操作交給來完成,因為是專門為處理圖形而設(shè)計,所以它在速度和能耗上更有效率。
在實習(xí)做一個移動項目的時候,實現(xiàn)一個動畫效果,在 iPhone 和 Chrome 上調(diào)試沒有問題,在千元左右的 Android 機(jī)上測試問題就很大了,卡頓非常明顯,百思不得其解,吐血,卒。
這個悲傷的故事就是本文的引子,真真切切的體會到了 CSS 對用戶體驗的影響非常明顯,稍有不慎就是一個大坑。下面,我們就來談?wù)?CSS 性能優(yōu)化的問題。
加載性能減少文件體積,壓縮代碼
減少阻塞加載,不要用 import
提高并發(fā)(這個不甚理解)
選擇器性能對整體性能的影響可以忽略不計了,但是選擇器的考究更多是為了規(guī)范化和可維護(hù)性、健壯性。具體怎么實施可以參考 Github 的這個分享:GitHub"s CSS Performance by Jon Rohan
渲染性能渲染性能是 CSS 優(yōu)化最重要的關(guān)注對象。我們先來了解一下瀏覽器的渲染機(jī)制。
瀏覽器的渲染機(jī)制瀏覽器渲染展示網(wǎng)頁的過程,大致分為以下幾個步驟:
解析HTML(HTML Parser)
構(gòu)建DOM樹(DOM Tree)
渲染樹構(gòu)建(Render Tree)
繪制渲染樹(Painting)
慎重選擇高消耗的樣式什么 CSS 屬性是高消耗的?就是那些繪制前需要瀏覽器進(jìn)行大量計算的屬性。
box-shadows
border-radius
transparency
transforms
CSS filters(性能殺手)
避免過分重排(Reflow)簡單解釋一下 Reflow:當(dāng)元素改變的時候,將會影響文檔內(nèi)容或結(jié)構(gòu),或元素位置,此過程稱為 Reflow。
常見的重排元素 | ||||
---|---|---|---|---|
width | height | padding | margin | |
display | border-width | border | top | |
position | font-size | float | text-align | |
overflow-y | font-weight | overflow | left | |
font-family | line-height | vertical-align | right | |
clear | white-space | bottom | min-height |
不要一條一條地修改 DOM 的樣式,預(yù)先定義好 class,然后修改 DOM 的 className
把 DOM 離線后修改,比如:先把 DOM 給 display:none (有一次 Reflow),然后你修改100次,然后再把它顯示出來
不要把 DOM 結(jié)點的屬性值放在一個循環(huán)里當(dāng)成循環(huán)里的變量
盡可能不要修改影響范圍比較大的 DOM
為動畫的元素使用絕對定位 absolute / fixed
不要使用 table 布局,可能很小的一個小改動會造成整個 table 的重新布局
避免過分重繪(Repaints)當(dāng)元素改變的時候,將不會影響元素在頁面當(dāng)中的位置(比如 background-color, border-color, visibility),瀏覽器僅僅會應(yīng)用新的樣式重繪此元素,此過程稱為 Repaint。
常見的重繪元素 | ||||
---|---|---|---|---|
color | border-style | visibility | background | |
text-decoration | background-image | background-position | background-repeat | |
outline-color | outline | outline-style | border-radius | |
outline-width | box-shadow | background-size |
CSS3 動畫是優(yōu)化的重中之重。除了做到上面兩點,減少 Reflow 和 Repaints 之外,還需要注意以下方面。
啟用 GPU 硬件加速GPU(Graphics Processing Unit) 是圖像處理器。GPU 硬件加速是指應(yīng)用 GPU 的圖形性能對瀏覽器中的一些圖形操作交給 GPU 來完成,因為 GPU 是專門為處理圖形而設(shè)計,所以它在速度和能耗上更有效率。
GPU 加速可以不僅應(yīng)用于3D,而且也可以應(yīng)用于2D。這里, GPU 加速通常包括以下幾個部分:Canvas2D,布局合成(Layout Compositing), CSS3轉(zhuǎn)換(transitions),CSS3 3D變換(transforms),WebGL和視頻(video)。
/* * 根據(jù)上面的結(jié)論 * 將 2d transform 換成 3d * 就可以強制開啟 GPU 加速 * 提高動畫性能 */ div { transform: translate(10px, 10px); } div { transform: translate3d(10px, 10px, 0); }
需要注意的是,開啟硬件加速相應(yīng)的也會有額外的開銷,參見這篇文章 CSS 硬件加速的好與壞
參考CSS 優(yōu)化、提高性能的方法有哪些? - 趙望野
CSS performance revisited: selectors, bloat and expensive styles
瀏覽器的渲染原理簡介
談?wù)?CSS 性能
前端工程師需要明白的「瀏覽器渲染」
學(xué)習(xí)通過 CSS 硬件加速提升你網(wǎng)站的性能
CSS 硬件加速的好與壞
兩張圖解釋 CSS 動畫的性能
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/111689.html
摘要:優(yōu)化條法則減少請求次數(shù)是性能優(yōu)化的起點??偽募笮∽兓淮?,但減少了請求次數(shù)從而加快了頁面顯示速度。使用內(nèi)容分發(fā)網(wǎng)絡(luò)可以通過服務(wù)提供商增加緩存相關(guān)壓縮頁面元素通過壓縮響應(yīng)內(nèi)容可減少頁面響應(yīng)時間?;煜亲钚』谠创a的備選方式。 Yahoo WEB優(yōu)化14條法則 減少HTTP請求次數(shù)是性能優(yōu)化的起點。這最提高首次訪問的效率起到很重要的作用。 減少HTTP請求次數(shù) Image maps組合多...
摘要:四如果需要遍歷數(shù)組,應(yīng)該先緩存數(shù)組長度,將數(shù)組長度放入局部變量中,避免多次查詢數(shù)組長度。五盡量選用局部變量而不是全局變量。所以如果這樣的表達(dá)式重復(fù)出現(xiàn),只要可能,應(yīng)該盡量少出現(xiàn)這樣的表達(dá)式,可以利用局部變量,把它放入一個臨時的地方進(jìn)行查詢。 通過網(wǎng)上查找資料了解關(guān)于性能優(yōu)化方面的內(nèi)容,現(xiàn)簡單整理,僅供大家在優(yōu)化的過程中參考使用,如有什么問題請及時提出,再做出相應(yīng)的補充修改。 一、 讓...
摘要:作用域鏈查找作用域鏈的查找是逐層向上查找。而全局變量和閉包則會與之相反,繼續(xù)保存,所以使用用后需手動標(biāo)記清除,以免造成內(nèi)存泄漏。獲取元素的屬性獲取元素的屬性等參考文檔高級程序設(shè)計作者以樂之名本文原創(chuàng),有不當(dāng)?shù)牡胤綒g迎指出。 showImg(https://segmentfault.com/img/bVburXV?w=500&h=399); 作用域鏈查找 作用域鏈的查找是逐層向上查找。查...
摘要:頁面中元素的布局是相對的,因此一個元素的布局發(fā)生變化,會聯(lián)動地引發(fā)其他元素的布局發(fā)生變化。對于有位置重疊的元素的頁面,這個過程尤其重要,因為一旦圖層的合并順序出錯,將會導(dǎo)致元素顯示異常。 What tools would you use to find a performance bug in your code? chrome What are some ways you may i...
摘要:雖然有著各種各樣的不同,但是相同的是,他們前端優(yōu)化不完全指南前端掘金篇幅可能有點長,我想先聊一聊閱讀的方式,我希望你閱讀的時候,能夠把我當(dāng)作你的競爭對手,你的夢想是超越我。 如何提升頁面渲染效率 - 前端 - 掘金Web頁面的性能 我們每天都會瀏覽很多的Web頁面,使用很多基于Web的應(yīng)用。這些站點看起來既不一樣,用途也都各有不同,有在線視頻,Social Media,新聞,郵件客戶端...
閱讀 3306·2023-04-26 00:57
閱讀 620·2021-10-08 10:05
閱讀 1366·2021-09-08 09:36
閱讀 4190·2021-08-12 13:31
閱讀 2556·2019-08-30 15:55
閱讀 2250·2019-08-30 15:55
閱讀 1025·2019-08-30 15:55
閱讀 2696·2019-08-29 13:17