成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入瀏覽器核心 高效CSS的秘訣

開發 前端
文章是一篇關于如何書寫高效CSS的最佳實踐,但同時,一味的追求高效也是不可取的,因為這可能讓你的CSS文件很難讀很難維護。

我們寫的CSS有多高效?換個說法,瀏覽器渲染我們的CSS會有多快?我承認這個問題我考慮的不夠多。這個問題本應該是瀏覽器廠商考慮的——他們的瀏覽器越快,用戶就越喜歡用他們的產品。

Mozilla有一篇關于這方面最佳實踐的文章,一直堅持Web應該更快的,我們一起看看他們闡釋的一些主要觀點。

從右向左

瀏覽器如何讀取你的CSS選擇器?如何巧妙的運用CSS選擇器?我們需要明白的最重要的一點是從右向左。比如這個選擇器ul > li a[title="home"],瀏覽器首先讀取的是a[title="home"]。這個首先被讀取的部分我們叫它key selector,它是瀏覽器最終要選擇的元素。

ID最快,Universal最慢

有四種類型的key selector,解析速度由快到慢依次是:ID、class、tag和universal:

  1. #main-navigation {   }      /* ID(最快) */  
  2. body.home #page-wrap {   }  /* ID */  
  3. .main-navigation {   }      /* Class */  
  4. ul li a.current {   }       /* Class *  
  5. ul {   }                    /* Tag */  
  6. ul li a {  }                /* Tag */  
  7. * {   }                     /* Universal(慢) */  
  8. #content [title='home']     /* Universal */ 

我們把這個原則與從右向左結合來看,就會發現下面這個選擇器并不是很快:

  1. #main-nav > li {   }  /* 比它看起來的要慢 */ 
  2.  

這真有點違反我們的直覺,由于ID很快,我們直覺的以為瀏覽器會迅速的找到#main-nav,然后找到它的孩子。但實際上,瀏覽器首先解析的是相對較慢的。

不要tag-qualify

永遠不要這樣做:

  1. ul#main-navigation {  } 
  2.  

ID已經是唯一的,不需要Tag來標識,這樣做會讓選擇器變慢。如果你可以,也盡量不要在class上這樣用。class不是唯一的,你可以用它來處理很多不同的元素。如果你希望擁有同一個class的元素有不同的樣式,你可能需要tag-qualify(比如li.first),但這是很少見的。

后代選擇器最糟糕

David Hyatt這樣說過:

The descendant selector is the most expensive selector in CSS. It is dreadfully expensive — especially if the selector is in the Tag or Universal Category.

換句話說,下面這個選擇器是很低效的:

  1. html body ul li a {  }
  2.  

匹配失敗的選擇器更高效

我不清楚從這里面我們可以學到什么,在自己的CSS文件里寫很多沒用的東西豈不是很奇怪。但還是應該說明一下,當從右向左的解析一個選擇器時,如果沒有匹配的結果,瀏覽器將會停止下一步的動作,于是更高效了。

想清楚你為什么這樣寫

考慮這樣一個選擇器:

  1. #main-navigation li a { font-family: Georgia, Serif; }
  2.  

font-family是可以級聯的,所以你可能根本不需要如此特殊的一個選擇器(如果你只是要改變字體的話)。這樣做會更高效,而且是高效很多:

  1. #main-navigation { font-family: Georgia, Serif; }
  2.  

CSS 3的效率問題

David Hyatt的說法是,“關于CSS 3選擇器最可悲的是,他們不應該將其只用在他們所關心的頁面性能上。”

CSS3選擇器(比如 :nth-child)能夠漂亮的定位我們想要的元素,又能保證我們的CSS整潔易讀。但是這些神奇的選擇器會浪費很多的瀏覽器資源。那該怎樣做?我們真的不應該使用它們嗎?讓我們考慮一些實用的東西。(關于CSS 3,51CTO推薦閱讀:定義未來Web樣式 CSS 3最新特性一覽

實用性

我是這樣認為的:不管怎樣,我們上面談論的最佳實踐都是有作用的。你可以遵守這些規則,因為他們并不會限制你CSS的能力。但也大可不必把它們當作教條執行。

如果你的網站正好非常緩慢,而你之前并沒有考慮過這些CSS最佳實踐,你可能需要好好檢查一下你的CSS了。如果你的網站沒有任何緩慢的跡象,那可以不用理它,以后寫CSS時注意就好了。

極速卻不實用

我們知道了ID是最高效的選擇器。如果你想要一個渲染最快的網頁,那你可以給頁面上每一個元素一個唯一的ID,然后樣式化每一個ID。這將會超級快,但也是極其滑稽的。這可能讓你的CSS文件很難讀很難維護。在一些對性能要求很高的硬編碼的網站上你都很難看到這種寫法。我們不應該為了效率而犧牲可讀性和可維護性。簡單說一點,很多的JavaScript庫都使用了CSS選擇器,上面的原則也依然適用。ID是最快的,而復雜的后代選擇器會比較慢。

本文轉自abitno的博客,

原文地址:http://abitno.me/efficiently-rendering-css

【編輯推薦】

  1. CSS 3布局體驗:靈活的盒子模型
  2. 高手總結CSS書寫技巧
  3. CSS技術在網頁設計中的運用 
責任編輯:王曉東 來源: 博客
相關推薦

2010-08-19 15:47:34

CSS Reset瀏覽器

2012-02-21 14:39:04

移動瀏覽器天天瀏覽器華為

2017-03-12 10:15:18

瀏覽器DOM樹CSSOM樹

2021-07-22 09:55:28

瀏覽器前端緩存

2010-08-20 14:11:26

IE火狐瀏覽器

2010-09-14 14:18:09

CSS跨瀏覽器開發

2013-11-20 13:04:41

css瀏覽器渲染

2010-09-15 15:39:03

CSS hack

2010-04-05 21:57:14

Netscape瀏覽器

2013-04-22 09:56:54

2013-04-22 09:52:04

.netchrome核心開發chrome

2022-07-07 08:43:05

HoudiniAPICSS

2010-09-15 16:19:17

IECSS hack

2012-03-20 11:41:18

海豚瀏覽器

2012-03-19 17:25:22

2012-03-20 11:31:58

移動瀏覽器

2012-03-20 11:07:08

2015-06-12 11:26:02

CSS瀏覽器 CSS Hac

2013-03-12 10:01:21

WebCSSJS

2009-07-24 15:29:11

支持CSS3
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 宅男伊人 | 欧美日韩久久久 | 91av在线不卡| 黄色在线免费观看视频 | 在线一区| 午夜日韩精品 | 青娱乐一区二区 | 国产国拍亚洲精品av | 亚洲精品视频三区 | 色播av| 激情视频中文字幕 | 国产午夜av片 | 欧美影院久久 | 日本成人久久 | 国产在线视频一区 | 欧美极品在线播放 | av一区二区三区四区 | 中文字幕亚洲欧美日韩在线不卡 | 亚洲中字在线 | 亚洲视频欧美视频 | 国产一区| 在线中文字幕第一页 | 狠狠艹| 天天操天天插 | 美日韩视频 | 中文字幕欧美一区二区 | 91久久综合亚洲鲁鲁五月天 | 亚洲国产精品精华素 | 99riav3国产精品视频 | 亚洲精品乱码久久久久久黑人 | 午夜一级做a爰片久久毛片 精品综合 | jizz在线看片| 四虎在线播放 | 一区二区三区四区不卡视频 | 国产精品大片 | 91精品国产综合久久精品图片 | 成人影院在线视频 | 毛片综合 | 日韩在线视频网址 | 欧美v在线观看 | 久久精品久久综合 |