CSS性能優(yōu)化提高css性能的方法

不規(guī)范的css會(huì)導(dǎo)致很多性能問題,這些問題可能在一些小的項(xiàng)目中不夠明顯,但是在大型項(xiàng)目中就會(huì)顯現(xiàn)出來。
css匹配原理
在優(yōu)化css之前我們需要了解下css是怎么進(jìn)行工作的,我們都知道css是由選擇器,屬性和屬性值構(gòu)成的。
我們可能會(huì)這樣寫上一行代碼
- //css
- .con .loulan1 p span{ display: block; }
- //html
- <div class="con">
- <div class="loulan">
- <p><span>文字</span></p>
- </div>
- </div>
在這里我們對con類里面的loulan類里的p標(biāo)簽里面的span標(biāo)簽進(jìn)行樣式定義。我說出來都嫌累更別說寫起來了,其實(shí)你可以把瀏覽器看作一個(gè)人,它渲染起來肯定也會(huì)浪費(fèi)性能。
而且css的匹配原理不是從左到右的,而是從右到左的,也就是說我們的這行代碼里面,先查找到頁面里面所有的span元素形成一個(gè)集合,再在所有的span元素往上查找,看看有多span的父元素是p元素或者父元素的父元素是p元素或者......慢慢尋找,把父元素不是p元素的刪去,再往上查找看集合里的有p元素又多少它的父元素的類是loulan...瀏覽器說:我好累...
其實(shí)呢瀏覽器從右到左進(jìn)行查找的好處是為了盡早過濾掉一些無關(guān)的樣式規(guī)則和元素。并且Firefox 稱這種查找方式為 keyselector(關(guān)鍵字查詢),所謂的關(guān)鍵字就是樣式規(guī)則中最后(最右邊)的規(guī)則,上面的 key 就是 span。人家本來是為了能盡快過濾到一些無關(guān)樣式規(guī)則的,我們這里缺一層套一層,層層不停歇。所以只是想定義一個(gè)span的樣式在span上加個(gè)類豈不是更好。有人這時(shí)要說了,那樣是需要在每個(gè)元素上都加上類嗎?那肯定不是必須的,只不過我們要了解瀏覽器是怎么查找匹配的,然后結(jié)合現(xiàn)在的結(jié)構(gòu)來做出一個(gè)最好的最方便的寫法。
- //css
- .loulanSpan{ display: block; }
- //html
- <div class="con">
- <div class="loulan">
- <p><span class="loulanSpan">文字</span></p>
- </div>
- </div>
css選擇器權(quán)值
這里說下CSS的 ID Class Tag選擇器的權(quán)值,也就是他們的優(yōu)先級(jí),權(quán)值越大,優(yōu)先級(jí)越高
ID:100
Class:10
Tag:1
有了上面兩個(gè)的基礎(chǔ)我們再詳細(xì)說下應(yīng)該怎樣來優(yōu)化css提高性能
1,減少css嵌套,最好不要套三層以上,一般情況下塊級(jí)元素加上類,里面的內(nèi)聯(lián)元素不用加,css寫的時(shí)候塊級(jí)class套內(nèi)聯(lián)tag,這樣不僅可以減少css文件大小,還能減少性能浪費(fèi)。
2,不要在ID選擇器前面進(jìn)行嵌套,ID本來就是唯一的而且人家權(quán)值那么大,前方嵌套完全是浪費(fèi)性能。
3,建立公共樣式類,把長段相同樣式提取出來作為公共類使用,比如我們常用的清除浮動(dòng),單行超出顯示省略號(hào)等等等,當(dāng)然如果你使用sass,繼承會(huì)讓你更加方便,同時(shí)我是比較提倡使用sass的,之后肯定也會(huì)寫一篇sass的博客。
4,縮寫css,其中包括縮寫maigin,padding,顏色值等等,要是有兩個(gè)或者兩個(gè)以上的margin-****,寫成margin: * * * *有助于文件大小。
5,減少通配符*或者類似[hidden="true"]這類選擇器的使用,挨個(gè)查找所有...這性能能好嗎?當(dāng)然重置樣式這些必須的東西是不能少的。
6,有些人喜歡在類名前面加上標(biāo)簽名:p.ty_p 來進(jìn)行更加精確的定位,但是這樣往往效率更差,類名應(yīng)該在全局范圍除非公用是唯一的,所以這種做法是應(yīng)該便面的。
7,巧妙運(yùn)用css的繼承機(jī)制,在css中很多屬性是可以繼承的比如顏色字體等等,父節(jié)點(diǎn)定義了,子節(jié)點(diǎn)就無需定義。
8,拆分出公共css文件,對于比較大的項(xiàng)目我們可以將大部分頁面的公共結(jié)構(gòu)的樣式提取出來放到單獨(dú)css文件里,這樣一次下載后就放到緩存里,當(dāng)然這種做法會(huì)增加請求,具體做法應(yīng)以實(shí)際情況而定。
9,不用css表達(dá)式,可能大家接觸比較少,但是要記住的是無論我們怎么炫酷,到了最后都是靜態(tài)的,所以表達(dá)式只是讓你的代碼顯得更加炫酷,但是他對性能的浪費(fèi)可能是超乎你的想象的,因?yàn)樗⒉恢皇怯?jì)算一次,一些小的事件可能都會(huì)增加它為了有效準(zhǔn)確而進(jìn)行計(jì)算求值的次數(shù)。
10,少用css rest,可能你會(huì)覺得重置樣式是規(guī)范,但是其實(shí)其中有很多的操作是不必要不友好的,有需求有興趣的朋友可以選擇normolize.css
11,cssSprite,合成所有icon圖片,用寬高加上bacgroud-position的背景圖方式顯現(xiàn)出我們要的icon圖,這是一種十分實(shí)用的技巧,極大減少了http請求。
當(dāng)然我們還需要一些善后工作,CSS壓縮(這里提供一個(gè)在線壓縮 YUI Compressor ,當(dāng)然你會(huì)用其他工具來壓縮是十分好的),GZIP壓縮,Gzip是一種流行的文件壓縮算法,詳細(xì)做法可以谷歌或者百度。
以上所述是小編給大家介紹的CSS性能優(yōu)化提高css性能的方法 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
- 這篇文章主要介紹了深入理解CSS @font-face性能優(yōu)化,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-06
網(wǎng)站前端性能優(yōu)化之javascript和css篇
之前看過Yahoo團(tuán)隊(duì)寫的一篇關(guān)于網(wǎng)站性能優(yōu)化的文章,文章是2010年左右寫的,雖然有點(diǎn)老,但是很多方面還是很有借鑒意義的。關(guān)于css的性能優(yōu)化,他提到了如下幾點(diǎn)2016-12-14- 這篇文章主要介紹了CSS代碼編寫方面的一些優(yōu)化技巧總結(jié),談到了包括避免通用規(guī)則和后代選擇器等方面來使代碼更加高效,需要的朋友可以參考下2016-02-29
網(wǎng)站性能優(yōu)化之CSS無圖片技術(shù)
CSS無圖片技術(shù)是什么?在不使用CSS Image(通過CSS的引入的背景圖片,不包括img標(biāo)簽內(nèi)的圖片)情況下生成類似圖片效果的技術(shù);換句話的意思就是在使用純CSS生成類似圖片效果2014-11-20- CSS 網(wǎng)站性能優(yōu)化筆記,大家可以結(jié)合下js 網(wǎng)站性能優(yōu)化筆記。2011-05-24
- 怎么會(huì)突然想起談css與性能優(yōu)化呢?其實(shí)這個(gè)問題我已經(jīng)想了很久了,想寫,但是也不知道從何寫起,今天就簡單的說一下,近段使用通過使用page Speed,對css性能優(yōu)化的一點(diǎn)看2009-09-16
- will-change通過告知瀏覽器該元素會(huì)有哪些變化,使瀏覽器提前做好優(yōu)化準(zhǔn)備,增強(qiáng)頁面渲染性能。接下來通過本文給大家分享css性能優(yōu)化-will-change,感興趣的朋友一起看看吧2019-05-06