寫了幾篇關於js的博客,也是關於性能的,如今,我以爲有必要那css來認真分析一下了。以前只是看別人這麼寫就跟着寫,可是沒有去研究這樣寫或者是否是正確的寫法,性價比怎麼樣,渲染的效率好麼!這些都沒有考慮。 css
那麼,如今,我提出css的一些選擇器的性能分析。html
.wrapper ul li a{color:red;……} .wrapper .list p.name{margin:10px 0;……} * {margin:0;padding:0} ……
這樣寫完了之後,渲染的效果至少呈現出來了,但是,要想到 css選擇器從右向左的匹配規則 web
此時,我就想研究一下瀏覽器在將DOM tree 變成 render tree 的時候css規則是如何匹配的?因而,就在網上找了一些資料:瀏覽器
看了這麼多個人理解是從右往左匹配會首先過濾掉一大批不符合規則的樣式,從而使得效率更高。舉個例子app
.wrapper .list a .demo{……}
若是從左往右匹配會先找到.wrapper,而後再找到裏面不少的.list,在往裏找直到找到那個.demo,查找的越深,過濾掉的也就越多,在這個查找的過程當中會有不少沒用的樣式也被遍歷過,這裏就致使匹配的效率很低。
若是從右向左匹配會首先過濾掉不是.demo的元素,在依次往上查找,越往上過濾掉的也就越少,這樣效率明顯比從左往右匹配要高不少
弄明白了從右向左匹配的規則那麼咱們要如何寫才能讓瀏覽器更快的匹配到呢?
瀏覽器在面對衆多的CSS樣式代碼時並非毫無規則的一個一個匹配,而是先將樣式規則分爲四個主要類別:ide
並引入關鍵選擇器的概念(選擇器最後的那部分)性能
.wrapper ul li a{color:red;……} /* 關鍵選擇器爲a */ .wrapper .list p.name{margin:10px 0;……} /* 關鍵選擇器爲.name */
根據關鍵選擇器屬於哪類再在這一類中查找,從而達到更快匹配的目的。那麼問題來了,怎樣寫才能達到高效呢?
CSS選擇器效率從高到低的排序以下:網站
以上引用自Steve Souders的Even Faster網站
在實際使用中咱們儘可能選擇高效一點的選擇器,可是有一點很難避免那就是組合選擇器的使用,通常都會用到。在使用組合選擇器時咱們須要注意一下幾點:ui
原本想寫幾個demo展現出不一樣選擇器的效率的,可是很差演示,你們能夠看看CSS selector performance
這篇文章中介紹了20中不一樣的選擇器的執行效率問題。spa
結合本身的實踐經歷,在編寫CSS規則時需注意如下幾點:
CSS選擇器在性能提高上儘管相對於js等提高空間不大,但在大型項目中高效率的css選擇器的性能優點就能獲得展示