一周一章前端書·第22周:《HTML與CSS進階教程》S02E09

第12章:性能優化

  • 高質量的CSS代碼主要體現在2個方面:可維護性和高性能。
  • 有研究表明,Amazon每增加10毫秒的頁面加載時間會導致銷售額下降1%,而谷歌加載時間每增加500毫秒將導致收入減少20%??梢娦阅艿奶岣邔τ诖笮途W站是至關重要的。

12.1 屬性縮寫

  • CSS很多屬性是可以縮寫的。通過縮寫屬性可以減少字符數,使得CSS代碼量更少。

盒模型縮寫

/*
 * border屬性縮寫
 */
border-width:1px;
border-style:solid;
border-color:gray;
//等同于
border:1px solid gray;
/* 
 * padding屬性縮寫的三種方式
 */
padding: 1px;   
/*padding-top + padding-left + padding-bottom + padding-right都為1px*/
padding: 1px 2px;   
/*padding-top和padding-bottom都為1px,padding-left和padding-right為2px*/
padding: 1px 2px 3px 4px;  
/*順時針方向設置padding-top、padding-right、padding-bottom、padding-left*/
/* 
 * margin屬性縮寫的三種方式
 */
margin: 1px;   
/*margin-top + margin-left + margin-bottom + margin-right都為1px*/
margin: 1px 2px;   
/*margin-margin-bottom都為1px,margin-margin-right為2px*/
margin: 1px 2px 3px 4px;  
/*margin-top、padding-right、margin-bottom、margin-left*/

背景縮寫

/*
 * background屬性縮寫
 */
background-image: url(../img/weibo.png);
background-repeat: no-repeat;
background-position: 0px 10px;
//等同于
background: url(../img/weibo.png) no-repeat 0px 10px;

字體縮寫

  • font 簡寫屬性在一個聲明中設置所有字體屬性
/*
 * 字體及文本屬性縮寫
 */
font-style: italic;
font-variant:small-caps;
font-weight: bold;
font-size: 12px;
line-height: 1.5em;
font-family: "微軟雅黑";
//等同于
font:italic small-caps bold 12px/1.5em "微軟雅黑";

12.2 語法壓縮

  • 通過對CSS語法進行精簡壓縮,減少CSS文件體積大小,從而減少頁面數據傳輸量。

空格和回車

  • 網站發布的時候,可以通過工具進行壓縮,去除CSS代碼中的空格和回車。

結尾分號

  • 最后的樣式屬性的結尾分號可以忽略。
.wrapper{
    padding:10px;
    border:1px solid gray;
}
//可以簡寫成
.wrapper{
    padding:10px;
    border:1px solid gray
}

url的引號

  • background-imagecursor等屬性的url()中的路徑的引號可以忽略。
background-image:url('logo.jpg');
//可以簡寫成
background-image:url(logo.jpg);

屬性值為0

  • 當屬性值是以0開頭的小數時,可以把開頭的0去掉。
font-size:0.5em;
//可以簡寫成
font-size:.5em;

合并相同的樣式

  • 可以通過群組選擇器抽取相同的樣式來合并代碼,達到代碼重用和精簡代碼的目的。

利用繼進行合并

  • 利用CSS屬性可繼承的特性,可以把相同的屬性定義在父元素上,從而精簡代碼。

12.3 壓縮工具

12.4 圖片壓縮

12.4.1 JPEG、PNG、GIF的區別

  • JPEG體積較大,可以存儲色調豐富的圖像,如照片、高清圖片等。但不支持透明;PNG是一種無損格式圖片,可以無損壓縮進行傳輸。PNG支持透明;GIF格式圖像效果較差,但可以制作動畫。
  • 總的來說,要展示高品質圖片可以用JPEG格式,一般圖片使用PNG格式,動圖使用GIF格式。

12.4.2 圖片壓縮

12.5 高性能的選擇器

  • 采用不同的CSS選擇器,瀏覽器的解析速度也不一樣。

12.5.1 選擇器的解析原理

#column .conent div{border:1px solid gray;}
  • 我們書寫CSS選擇器是從左到右,但瀏覽器對選擇器的規則是從右到左來解析的。如上述代碼,瀏覽器會先查詢所有的div元素,再篩選這些div元素中,有沒有存在父元素為.content類的,最后從篩選條件中找出祖先元素id為column的。
  • 可見,最右側的選擇器是決定執行效率的關鍵,它也稱為“關鍵選擇器”。

12.5.2 CSS選擇器的匹配效率

//由高到低的排序
id選擇器 > class選擇器 > 元素選擇器 > 相鄰選擇器 > 子選擇器 > 后代選擇器 > 通配符選擇器 > 屬性選擇器 >  偽類選擇器

12.5.3 開發注意事項

  1. 避免使用低效率的選擇器 :比如通配符選擇、子選擇器、后代選擇等匹配的量非常大,效率較低,應該盡量少使用。但也不要因為追求性能,而增加過多的id、class來替代使用,以致泛濫成災;
  2. 不要在id/class選擇器前加元素名:在選擇器前添加元素名會增加匹配量;
  3. 選擇器的嵌套不要超過三層,關鍵選擇器盡可能精準:選擇器的層次越多,匹配的次數就越多,性能也就越慢;
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,774評論 1 92
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,588評論 25 707
  • 10.恒溫箱嬰兒展覽Incubated Babies Fairs 在20世紀之前,早產兒的存活率特別低。當Mart...
    留學咖啡館閱讀 1,213評論 0 2
  • 在C/C++中,左值(lvalue)和右值(rvalue)是用于規定表達式(expression)的性質。C++中...
    程序熊大閱讀 2,339評論 1 6
  • 上周六是我們薛航計財部小聚的日子,一個難得放假又能相聚在一起不談工作盡情享受假期的日子! 我們是一個團結又有愛的小...
    223了凡閱讀 259評論 1 1