欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

CSS代碼編寫的一些性能優(yōu)化技巧總結(jié)

MDN   發(fā)布時間:2016-02-29 11:35:39   作者:佚名   我要評論
這篇文章主要介紹了CSS代碼編寫方面的一些優(yōu)化技巧總結(jié),談到了包括避免通用規(guī)則和后代選擇器等方面來使代碼更加高效,需要的朋友可以參考下

CSS規(guī)范并沒有明確瀏覽器如何去實現(xiàn)樣式系統(tǒng),僅僅是說明了它們必須這樣做。有鑒于此,不同的樣式系統(tǒng)引擎可能會擁有完全不同的表現(xiàn)和行為,特別是 Gecko 與 WebKit, 這兩個引擎都是開源項目,實現(xiàn)了類似的算法,具有極其相近的優(yōu)缺點。因此下面介紹的小技巧對于真實世界的 Web 文檔將會十分有用。

第一部分內(nèi)容綜合討論了常見的樣式系統(tǒng)是如何分類規(guī)則的。接下來的部分包含了書寫規(guī)則的指南,它利用了前面討論的樣式系統(tǒng)的優(yōu)點。

樣式系統(tǒng)如何拆分規(guī)則

樣式系統(tǒng)將規(guī)則拆分成四個主要類別:

1.ID 規(guī)則
2.Class 規(guī)則
3.標簽規(guī)則
4.通用規(guī)則
理解這些分類是十分關(guān)鍵的,因為它們是構(gòu)建規(guī)則匹配塊的基礎(chǔ)。

我在下面的段落中使用術(shù)語 關(guān)鍵選擇器(key selector)。選擇器的最后面的部分即為關(guān)鍵選擇器(即用來匹配目標元素的那部分,而不是該元素的祖先元素)。

例如,在下面規(guī)則中…

CSS Code復(fù)制內(nèi)容到剪貼板
  1. a img,    
  2. div > p,    
  3. h1 + [title] {   
  4.   …   
  5. }  

關(guān)鍵選擇器為 img、 p 和 title.

ID 規(guī)則

這第一個類別包含了那些將 ID 選擇器作為關(guān)鍵選擇器的規(guī)則。

示例

CSS Code復(fù)制內(nèi)容到剪貼板
  1. button#backButton {…} /* This is an ID-categorized rule */  
  2. #urlBar[type="autocomplete"] {…} /* This is an ID-categorized rule */  
  3. treeitem > treerow > treecell#myCell:active {…} /* This is an ID-categorized rule */  

Class 規(guī)則

如果一個規(guī)則將一個 class 明確作為它的關(guān)鍵選擇器,那么它就屬于該類別。

示例

CSS Code復(fù)制內(nèi)容到剪貼板
  1. button.toolbarButton {…} /* A class-based rule */  
  2. .fancyText {…} /* A class-based rule */  
  3. menuitem > .menu-left[checked="true"] {…} /* A class-based rule */  

標簽規(guī)則

如果既沒有 class 也沒有 ID 來明確作為關(guān)鍵選擇器,那么接下來的候選者就是 標簽 類別。 如果一條規(guī)則將一個標簽作為它的關(guān)鍵選擇器,那么這條規(guī)則就屬于該類別。

示例

CSS Code復(fù)制內(nèi)容到剪貼板
  1. td {…} /* A tag-based rule */  
  2. treeitem > treerow {…} /* A tag-based rule */  
  3. input[type="checkbox"] {…} /* A tag-based rule */  

通用規(guī)則

不屬于上面那些類別的規(guī)則都屬于這個類別。

示例

CSS Code復(fù)制內(nèi)容到剪貼板
  1. [hidden="true"] {…} /* A universal rule */     
  2. * {…}  /* A universal rule */  
  3. tree > [collapsed="true"] {…} /* A universal rule */  

樣式系統(tǒng)如何匹配規(guī)則

樣式系統(tǒng)從關(guān)鍵選擇器開始匹配規(guī)則,然后左移(查找規(guī)則選擇器的任何祖先元素)。只要選擇器的子樹(substree)一直在檢查,樣式系統(tǒng)就會持續(xù)左移,直到和規(guī)則匹配,或者是因為不匹配而放棄該條規(guī)則。

規(guī)則過濾是你需要學習的最基礎(chǔ)的概念。分類存在的意義就是過濾掉無關(guān)的規(guī)則(這樣樣式系統(tǒng)就不會浪費時間去匹配它們了)。

這就是能夠極大提高性能的關(guān)鍵。對于一個給定的元素,需要匹配的規(guī)則越少,樣式的解析就會越快。

舉個例子,如果一個元素擁有一個 ID,那么只有匹配該 ID 的 ID 規(guī)則才會被選中。同理,只有當 Class 規(guī)則中的 class 出現(xiàn)在元素上時該規(guī)則才被檢查。只有當標簽規(guī)則的標簽匹配時該規(guī)則才被檢查。通用規(guī)則始終都會檢查。

高效 CSS 指南

避免通用規(guī)則

請確保規(guī)則不以通用類型選擇器作為結(jié)束!

不要用標簽名或 classes 來限定 ID 規(guī)則

如果規(guī)則擁有 ID 選擇器作為其關(guān)鍵選擇器,則不要為規(guī)則增加標簽名。因為 ID 是唯一的,增加標簽只會沒必要地減緩匹配過程。


CSS Code復(fù)制內(nèi)容到剪貼板
  1. button#backButton {…}  


CSS Code復(fù)制內(nèi)容到剪貼板
  1. .menu-left#newMenuIcon {…}  


CSS Code復(fù)制內(nèi)容到剪貼板
  1. #backButton {…}  


CSS Code復(fù)制內(nèi)容到剪貼板
  1. #newMenuIcon {…}  

例外:在不同的場景下,要動態(tài)改變元素的class,從而應(yīng)用不同的樣式,這是可取的。但是這個相同的class是與其他元素所共享的。
不要用標簽名限定 class 規(guī)則

前面那節(jié)內(nèi)容在這里同樣適用。雖然在同一頁面能夠多次使用 class,但它仍然比標簽名更獨特。

按照慣例,你可以將標簽名包含在 class 名里。但是,這會有損靈活性;如果設(shè)計更改以至于要變更標簽,這條class 名也必須跟著變動。(最好的辦法是選擇嚴格語義化的名字,畢竟分離樣式表的一個目標就是為了靈活性。)


CSS Code復(fù)制內(nèi)容到剪貼板
  1. treecell.indented {…}  


CSS Code復(fù)制內(nèi)容到剪貼板
  1. .treecell-indented {…}  


CSS Code復(fù)制內(nèi)容到剪貼板
  1. .hierarchy-deep {…}  

盡量使用最具體的類別

解析速度變慢的罪魁禍首就是標簽類別中有過多的規(guī)則。通過增加 class 到元素上,我們就可以進一步的將這些規(guī)則劃分到 Class 類別中,這將減少用于匹配標簽的時間。


CSS Code復(fù)制內(nèi)容到剪貼板
  1. treeitem[mailfolder="true"] > treerow > treecell {…}  


CSS Code復(fù)制內(nèi)容到剪貼板
  1. .treecell-mailfolder {…}  

避免后代選擇器

后代選擇器是 CSS 中性能耗用最大的選擇器。 它是性能開銷相當大的——特別是當選擇器在標簽或通用類別中。

通常我們需要的是 子選擇器。比如說,當性能十分差的時候,F(xiàn)irefox 的用戶界面CSS 將毫無理由的禁止掉后代選擇器。你也應(yīng)該在網(wǎng)頁中這么做。


CSS Code復(fù)制內(nèi)容到剪貼板
  1. treehead treerow treecell {…}  

略好,但還是差(查看下一條指南)

CSS Code復(fù)制內(nèi)容到剪貼板
  1. treehead > treerow > treecell {…}  

標簽分類的規(guī)則不要包含子選擇器

標簽類別的規(guī)則中避免使用子選擇器。否則的話,在該元素出現(xiàn)的所有地方,匹配時間都將極大延長(特別是當規(guī)則很可能會被匹配)。


CSS Code復(fù)制內(nèi)容到剪貼板
  1. treehead > treerow > treecell {…}  


CSS Code復(fù)制內(nèi)容到剪貼板
  1. .treecell-header {…}  

在使用子選擇器的地方想想為什么

當使用子選擇器時要十分謹慎。能免則免。

特別來說,子選擇器常常用于 RDF 樹與菜單:


CSS Code復(fù)制內(nèi)容到剪貼板
  1. treeitem[IsImapServer="true"] > treerow > .tree-folderpane-icon {…}  

要記住,模板中的 REF 特性可以重復(fù)出現(xiàn)!好好利用這一優(yōu)點。在子 XUL 元素上重復(fù)使用 RDF 屬性,這樣可以基于該屬性來修改元素。

GOOD

CSS Code復(fù)制內(nèi)容到剪貼板
  1. .tree-folderpane-icon[IsImapServer="true"] {…}  

依賴繼承

了解哪些屬性能夠繼承,然后允許它們這樣做!

例如,XUL組件會明確的設(shè)置,使得父級元素的列表樣式圖像或字體規(guī)則衍生到匿名內(nèi)容。因而沒有必要去在匿名內(nèi)容上直接應(yīng)用規(guī)則浪費時間。


CSS Code復(fù)制內(nèi)容到剪貼板
  1. #bookmarkMenuItem > .menu-left { list-style-imageurl(blah) }  


CSS Code復(fù)制內(nèi)容到剪貼板
  1. #bookmarkMenuItem { list-style-imageurl(blah) }  

在以上示例中,要為匿名內(nèi)容應(yīng)用樣式(不利用 list-style-image 的繼承特性),將會產(chǎn)生Class分類中的規(guī)則,當這條規(guī)則本應(yīng)該止于ID分類——所有分類中最確切的分類。

謹記: 所有元素都有同一種class,尤其是匿名內(nèi)容!

上面示例中的“差”規(guī)則強制每個菜單的圖標都要在包含書簽的菜單項內(nèi)進行測試。因為這里有很多菜單,這將是極其耗費的。相反,這條“好”規(guī)則將測試限制在書簽菜單(外圍容器,非單獨項)內(nèi)。

使用 -moz-image-region!

如果你正在開發(fā)針對Mozilla的代碼:將一系列圖像放置在一個單獨的文件中,然后使用 -moz-image-region 進行選擇,這比將他們分別放在自身的文件中來選擇要表現(xiàn)得更加良好。

使用局部樣式表

如果你能夠明確將樣式表作為XBL源,這些樣式僅僅應(yīng)用在被綁定的元素和其中的匿名內(nèi)容上。這會減小通用規(guī)則和子元素選擇器帶來的負面影響,因為他們考慮的元素會更少。

如非必要則避免特定瀏覽器的渲染特征

總有有一些針對特定瀏覽器的或者實驗性的標簽和CSS屬性,他們以前綴的形式來區(qū)分能夠起作用的瀏覽器,例如 -webkit、-moz、 -ms、-o 等等。一旦某個標簽或?qū)傩员粯藴驶@些前綴屬性就會被移除。舉個例子,在 border-radius 被標準化和被所有主流瀏覽器實現(xiàn)之前,你必須使用 -webkit-border-radius 和 -moz-border-radius 等屬性。

對特定渲染的前綴和標簽及屬性的標準化的變化保持意識,并且在任何可行的時間都要去避免使用任何特定渲染的特性。

相關(guān)文章

  • 深入理解CSS @font-face性能優(yōu)化

    這篇文章主要介紹了深入理解CSS @font-face性能優(yōu)化,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-06
  • 網(wǎng)站前端性能優(yōu)化之javascript和css篇

    之前看過Yahoo團隊寫的一篇關(guān)于網(wǎng)站性能優(yōu)化的文章,文章是2010年左右寫的,雖然有點老,但是很多方面還是很有借鑒意義的。關(guān)于css的性能優(yōu)化,他提到了如下幾點
    2016-12-14
  • CSS性能優(yōu)化提高css性能的方法

    這篇文章主要介紹了CSS性能優(yōu)化提高css性能的方法,不規(guī)范的css會導(dǎo)致很多性能問題,所以學習掌握css性能優(yōu)化技巧是非常必要的,對css性能優(yōu)化知識感興趣的朋友一起學習吧
    2016-08-25
  • 網(wǎng)站性能優(yōu)化之CSS無圖片技術(shù)

    CSS無圖片技術(shù)是什么?在不使用CSS Image(通過CSS的引入的背景圖片,不包括img標簽內(nèi)的圖片)情況下生成類似圖片效果的技術(shù);換句話的意思就是在使用純CSS生成類似圖片效果
    2014-11-20
  • CSS 網(wǎng)站性能優(yōu)化筆記

    CSS 網(wǎng)站性能優(yōu)化筆記,大家可以結(jié)合下js 網(wǎng)站性能優(yōu)化筆記。
    2011-05-24
  • 對css性能優(yōu)化的一點看法

    怎么會突然想起談css與性能優(yōu)化呢?其實這個問題我已經(jīng)想了很久了,想寫,但是也不知道從何寫起,今天就簡單的說一下,近段使用通過使用page Speed,對css性能優(yōu)化的一點看
    2009-09-16
  • css性能優(yōu)化-will-change使用詳解

    will-change通過告知瀏覽器該元素會有哪些變化,使瀏覽器提前做好優(yōu)化準備,增強頁面渲染性能。接下來通過本文給大家分享css性能優(yōu)化-will-change,感興趣的朋友一起看看吧
    2019-05-06

最新評論