一、為什麼我要測試CSS的性能
這是背景:
我是OOCSS(譯者注:面向對象CSS)的忠實粉絲。但是最近工作,我一直使用Compass,SASS(譯者注:SASS使CSS函數化,有諸如變量,嵌套,混合,繼承等特性,需Ruby支持).我有時候感覺到OOCSS和SASS似乎有點古怪。我的一個朋友把我介紹給了Chris Eppstein(Compass的創建者),我們就SASS中的@extend方法進行了探討。所以我決定創建一個CSS測試頁面,用一種很原生態的方式來顯示是否SASS的@extend方法和CSS的OOCSS方法之間有著顯著的性能差異。
譯者補充,下圖為SASS@extend繼承實現的示例截圖:

關於OOCSS,Nicole Sullivan有份不錯的ppt教案,具體見下面:
Object Oriented CSS
查看更多Nicole Sullivan的presentations.
本想翻譯下的,結果此幻燈片被作者設置為不能下載,要是自己翻譯並重新制作份幻燈片,是騰不出那麼多時間的,所以作罷。其有兩個主要原則:
* 分離結構和皮膚
* 分離容器和內容
此原則多少與自己“CSS樣式分離之再分離”一文中提到的一些思想類似。
二、測試如何工作的
此測試制造了差不多2000個box,所有的box都有一個獨一無二的背景(樣式)。有幾種格式用來測試(見下面的鏈接),你可以逐個更改以測試器速度的差異。只要根據您的意願點擊相應的鏈接。
此測試用了一小段腳本,此段腳本來自Steve Souder的博文:Performance Impact of CSS Selectors(CSS選擇器的性能影響)
Steve的文章可以說是進入了CSS選擇器性能更細致的一個境界,非常值得閱讀。
三、CSS格式
1. OOCSS (似乎挺快的),雙class,如:class="box box-#",基本的CSS樣式在class box中,然後直添加背景樣式在唯一的class中。
2. Sass @extend (速度不確定),一個class,如class="box-3",然後在基本規則上創建一個多選擇器規則,如.box-1, .box-2 {generics}。
3. 囂張的CSS 添加所有的基本CSS到一個唯一的class上,沒有“瘦身”。
4. 使用ID選擇器 雖然我不建議使用ID,但是用來測試還是值得一試的。
5. 沒有CSS 很好的底線測試
代碼示例?
OOCSS樣式:一個主class,包含所有的共同規則,然後一個獨特的規則使用其他class
復制代碼代碼如下:
.box {padding:25px;border:1px solid #000;border-radius:5px;}
.box-1 {background-color:#FFEE00;}
.box-2 {background-color:#00FFee;}
...
@extend樣式:將所有的獨特class歸為一個,逗號分隔的使用公用屬性的class列表。
復制代碼代碼如下:
.box-1,.box-2 {padding:25px;border:1px solid #000;border-radius:5px;}
.box-1 {background-color:#FFEE00;}
.box-2 {background-color:#00FFEE;}
...
長(腫脹)樣式:所有的公共樣式都分離到獨一無二的class中。
復制代碼代碼如下:
.box-1 {
padding:25px;
border:1px solid #000;
border-radius:5px;
background-color:FFEE00;}
.box-2 {
padding:25px;
border:1px solid #000;
border-radius:5px;
background-color:00FFEE;}
...
無CSS:有點兒自我解釋
四、測試結果
測試結果貌似挺有趣的,讓我們看看一些圖表好嗎?

所以讓我們先討論下CSS性能,這裡有些我發現的東東:
類(class)選擇器和ID選擇器基本上是相同的速度
SASS/Compass的@extend格式僅稍稍落後於OOCSS格式
臃腫的格式在大數量級速度比其他格式明顯要慢
即使是極端的情況,最好與最壞的時間差異也在100-200毫秒之間
還有浏覽器性能要注意的(加分):
大多數浏覽器的表現大致相同,只是略快一些
火狐是測試的浏覽器中最慢的
Opera渲染快速的CSS最快,渲染慢速的CSS最慢
還有就是我自己測試後的個人結論:
OOCSS和@extend格式相當快
腫脹的CSS有害性能
哦,,差點忘了,這裡是測試頁面。
更新:
在測試中我發現有一些出入,可能影響測試,所以我刪除任何外部引用的文件,和其他可能影響CSS性能的東東(像是text-shadow)。
//zxx:以上是翻譯的全部
五、簡短開溜的結語
一般來講,一個頁面的CSS渲染效率的高低與該頁面的CSS量有一定的關系。使用面對對象或是我提過的分離的思想都是精簡CSS,提高CSS性能的不錯的手段。
翻譯能力有限,如果有什麼不准確的地方歡迎指正。
就這些。