提高css效能的方法

來源:互聯網
上載者:User
這篇文章主要介紹了CSS效能最佳化提高css效能的方法,不規範的css會導致很多效能問題,所以學習掌握css效能最佳化技巧是非常必要的,對css效能最佳化知識感興趣的朋友一起學習吧

不規範的css會導致很多效能問題,這些問題可能在一些小的項目中不夠明顯,但是在大型項目中就會顯現出來。

css匹配原理

在最佳化css之前我們需要瞭解下css是怎麼進行工作的,我們都知道css是由選取器,屬性和屬性值構成的。

我們可能會這樣寫上一行代碼

//css   .con .loulan1 p span{ display: block; }   //html   <p class="con">       <p class="loulan">           <p><span>文字</span></p>       </p>   </p>

在這裡我們對con類裡面的loulan類裡的p標籤裡面的span標籤進行樣式定義。我說出來都嫌累更別說寫起來了,其實你可以把瀏覽器看作一個人,它渲染起來肯定也會浪費效能。

而且css的匹配原理不是從左至右的,而是從右至左的,也就是說我們的這行代碼裡面,先尋找到頁面裡面所有的span元素形成一個集合,再在所有的span元素往上尋找,看看有多span的父元素是p元素或者父元素的父元素是p元素或者......慢慢尋找,把父元素不是p元素的刪去,再往上尋找看集合裡的有p元素又多少它的父元素的類是loulan...瀏覽器說:我好累...

其實呢瀏覽器從右至左進行尋找的好處是為了儘早過濾掉一些無關的樣式規則和元素。並且Firefox 稱這種尋找方式為 keyselector(關鍵字查詢),所謂的關鍵字就是樣式規則中最後(最右邊)的規則,上面的 key 就是 span。人家本來是為了能儘快過濾到一些無關樣式規則的,我們這裡缺一層套一層,層層不停歇。所以只是想定義一個span的樣式在span上加個類豈不是更好。有人這時要說了,那樣是需要在每個元素上都加上類嗎?那肯定不是必須的,只不過我們要瞭解瀏覽器是怎麼尋找匹配的,然後結合現在的結構來做出一個最好的最方便的寫法。

//css .loulanSpan{ display: block; }   //html <p class="con">       <p class="loulan">           <p><span class="loulanSpan">文字</span></p>       </p>   </p>

css選取器權值

這裡說下CSS的 ID Class Tag選取器的權值,也就是他們的優先順序,權值越大,優先順序越高

ID:100

Class:10

Tag:1

有了上面兩個的基礎我們再詳細說下應該怎樣來最佳化css提高效能

1,減少css嵌套,最好不要套三層以上,一般情況下區塊層級元素加上類,裡面的內嵌元素不用加,css寫的時候塊級class套內聯tag,這樣不僅可以減少css檔案大小,還能減少效能浪費。

2,不要在ID選取器前面進行嵌套,ID本來就是唯一的而且人家權值那麼大,前方嵌套完全是浪費效能。

3,建立公用樣式類,把長段相同樣式提取出來作為公用類使用,比如我們常用的清除浮動,單行超出顯示省略符號等等等,當然如果你使用sass,繼承會讓你更加方便,同時我是比較提倡使用sass的,之後肯定也會寫一篇sass的部落格。

4,縮寫css,其中包括縮寫maigin,padding,顏色值等等,要是有兩個或者兩個以上的margin-****,寫成margin: * * * *有助於檔案大小。

5,減少萬用字元*或者類似[hidden="true"]這類別選取器的使用,挨個尋找所有...這效能能好嗎?當然重設樣式這些必須的東西是不能少的。

6,有些人喜歡在類名前面加上標籤名:p.ty_p 來進行更加精確的定位,但是這樣往往效率更差,類名應該在全域範圍除非公用是唯一的,所以這種做法是應該便面的。

7,巧妙運用css的繼承機制,在css中很多屬性是可以繼承的比如顏色字型等等,父節點定義了,子節點就無需定義。

8,拆分出公用css檔案,對於比較大的項目我們可以將大部分頁面的公用結構的樣式提取出來放到單獨css檔案裡,這樣一次下載後就放到緩衝裡,當然這種做法會增加請求,具體做法應以實際情況而定。

9,不用css運算式,可能大家接觸比較少,但是要記住的是無論我們怎麼炫酷,到了最後都是靜態,所以運算式只是讓你的代碼顯得更加炫酷,但是他對效能的浪費可能是超乎你的想象的,因為它並不只是計算一次,一些小的事件可能都會增加它為了有效準確而進行計算求值的次數。

10,少用css rest,可能你會覺得重設樣式是規範,但是其實其中有很多的操作是不必要不友好的,有需求有興趣的朋友可以選擇normolize.css

11,cssSprite,合成所有icon圖片,用寬高加上bacgroud-position的背景圖方式顯現出我們要的icon圖,這是一種十分實用的技巧,極大減少了http請求。

當然我們還需要一些善後工作,CSS壓縮(這裡提供一個在線壓縮 YUI Compressor ,當然你會用其他工具來壓縮是十分好的),GZIP壓縮,Gzip是一種流行的檔案壓縮演算法,詳細做法可以Google或者百度。

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.