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

一個超棒的CSS小工具:最佳Web性能優化

開發 前端
今天寫了一個CSS的小工具,也算是最近關于CSS和Web性能優化思考的一次實踐。

下面開始介紹一下,這個小工具主要功能有以下這些:

◆ 代碼壓縮

◆ 合并請求

◆ 語法擴展

◆ 緩存設置

代碼壓縮

這個小工具其實是一個Default.aspx頁面文件,我們只要把它放到網站CSS文件夾里面,保證這個頁面命名是默認首頁,然后把我們原來引用的CSS文件夾后面加一個問號就行了。用我的博客舉個例子,我本來文章頁面中有三個CSS引用:

  1. <link href="css/detail.css"  rel="stylesheet" type="text/css" /> 
  2. <link href="css/shThemeDefault.css"  rel="stylesheet" type="text/css" /> 
  3. <link href="css/shCore.css"  rel="stylesheet" type="text/css" /> 

然后我們只要改成這樣就可以了:

  1. <link href="css/?detail.css"  rel="stylesheet" type="text/css" /> 
  2. <link href="css/?shThemeDefault.css"  rel="stylesheet" type="text/css" /> 
  3. <link href="css/?shCore.cssshThemeDefault.css"  rel="stylesheet" type="text/css" /> 

這樣之后有什么分別呢?加了問號之后,CSS引用都定向到我們的頁面,頁面根據后面的參數,讀取CSS文件,然后把其中的無效空格,換行,注釋全部清除掉。然后返回一個壓縮后的CSS文件。可以點擊下面兩個鏈接看看壓縮前后的效果:

壓縮前:http://www.vinqon.com/codeblog/css/shCore.css

壓縮后:http://www.vinqon.com/codeblog/css/?shCore.css

合并請求

對于一個Web優化狂熱者來說,每一個Http請求都是那么的刺眼。這不得不說說一些讓人糾結的事情。看過《高性能網站建設指南》的都知道,黃金法則第一條就是減少http請求,對于CSS來說,我們一般用這些方法來盡量減少請求:

1.合并CSS文件。一個頁面往往引用了多個CSS文件,為了減少其請求數目,我們可以直接把該頁面需要請求的CSS文件手動合并成為一個輸出。但是,這帶來的后果是,嚴重不利于代碼的維護和管理。并且,合并之后的代碼都是獨立的,多個頁面共用的代碼無法緩存。

2.內聯CSS代碼。內聯CSS的好處是完全杜絕了http請求,而且可以保證CSS里面附帶的圖片也能立刻請求,讓頁面更快完成渲染,QQ,新浪等的門戶首頁都使用了內嵌CSS。但是問題還是那個,首先不利于維護,其次是不能實現緩存。因為這些CSS每次都要下載,如果外聯的話第二次請求的時候就可以直接使用緩存文件。

針對內聯CSS代碼的方案,之前我就想過做一個ASP.Net的插件,把在引用css的link標簽改成服務器控件,輸出頁面的時候,控件會加載css文件內嵌到頁面中,這樣可以使內聯代碼也便于維護。

而針對合并CSS文件的方案,我在這個小工具中實現了請求時自動合并,這其實也不是什么新東西,好像之前也見過,還是用上面的例子,三個CSS文件合并:

  1. <link href="css/?detail.css&shCore.css&shThemeDefault.css"  rel="stylesheet" type="text/css" /> 

只要用&把不同的文件名字鏈接起來,就會得到一個合并的輸出。通過這樣的實時合并,很好避免了手動合并帶來的代碼混亂,而且當有大量文件的時候,可以減少http請求數目,有明顯的提升。

但是,不得不提一下的是:不一定全部CSS合并起來輸出就是最好的,原因首先還是緩存問題,共用文件不應該合并,因為這樣使得它每次都要重新下載。另外一個也是很重要的問題是,瀏覽器是會并行下載CSS文件的,如果分成多個文件,可以讓最早下載下來的CSS文件立刻被使用,如果我們把全部亂七八糟的都合并起來,瀏覽器要等到整個CSS文檔下載完畢才能使用,可能帶來性能的倒退。所以,結論是:共用和基礎的CSS文件不應該合并。

語法擴展

先說說目前比較經典的一種CSS代碼組織結構,這也是《編寫高質量代碼—Web前端開發修煉之道》作者推薦的方案:

◆ 基礎樣式(主要包括對默認樣式的Reset以及對用class選擇器組合常用的樣式)

◆ 全站樣式(全站各個頁面都要用到的樣式,一般負責網站整體結構的構架)

◆ 頁面樣式(頁面級的樣式,針對頁面細節的調整)

關于CSS代碼組織不是本次主題,我想說一下的是上面粗體字提到的一種比較流行的方法:·

  1. .fb12{font-size:12px;font-weight:blod}  
  2. .red{color:red}  
  3. .clear{clear:both

然后我們在頁面中這么使用:

  1. <div id="example" class="fb12 red clear">這是范例!</div> 

這些寫法其實也沒什么特別,但是我覺得很值得探討,沒興趣的可以直接跳過這一段。我們一般在頁面編碼時,都是先寫好HTML,再去寫樣式。在寫樣式的時候我們要為某個標簽應用某個樣式,就得用各種選擇符找到目標元素,然后賦予樣式。這時候,無論是類,還是標簽,ID,它們的角色都是選擇者,區別只是ID用來選一個,標簽和類多用來選擇多個而已。但是在上面例子中,類的情況就有些不同,在上面那種類的樣式定義的時候,我們不會想到這一定會用在哪里,我們只想到這些樣式使用可能比較頻繁,先寫出來,以便復用,最后才去HTML標簽上加上多個不同的class,組合成一個新的獨立樣式。這和直接在style上面寫規則的不同是,style只能使用的CSS基本屬性,是粒度最小的CSS規則,用class可以通過基本屬性的組合,形成一定粒度,然后我們可以通過在多個標簽使用不同類的組合形成最終樣式。這樣做一方面可以保證代碼復用,另一方面又可以便于維護。其實上,這種方法更多有標簽選擇樣式的意味,而類這個雙向選擇特性是源于 類選擇符與標簽之間可以實現多對多的關系。

但是,這種寫法有一個弊端,就是不利于結構和樣式的分離。樣式出現在元素里面,一旦修改,很容易觸碰到html代碼。為了解決這個問題,我在這個小工具里進行了語法擴展,我們可以在樣式表中使用多個class。看例子吧:

  1. .fb12{font-size:12px;font-weight:blod;}  
  2. .red{color:red;}  
  3. .clear{clear:both;}  
  4.  
  5. #example{class:fb12 red clear; width:500px;}  

我們編寫css的時候可以直接向上面那樣寫,然后輸出會變成這樣:

  1. .fb12{font-size:12px;font-weight:blod;}  
  2. .red{color:red;}  
  3. .clear{clear:both;}  
  4. #example{font-size:12px;font-weight:blod;color:red;clear:both;width:500px;} 

很久之前就想過,如果css有這功能多好哇,代碼可以高度復用了。這次終于弱弱地實現了一下了。需要注意的是,編譯過程代碼寫得不太好,最好嚴格遵循css格式,譬如,每個規則后面都必須有分號。另外,也不支持嵌套。

感謝Gray Zhang的推薦,原來目前已經有不少強大CSS語法擴展的工具,譬如Sass,Lesscss,兩者功能相似,后者甚至支持在客戶端編譯。

緩存設置

上面很多次提到過緩存,但是因為我們使用了頁面輸出,常常不能被瀏覽器緩存,這需要我們自己手動設置,只要在參數后面加上expire=分鐘數,就可以了,譬如:

http://localhost:56349/MyBlog/CodeBlog/css/?global.css&expire=50001

這個小工具很多正則,有人可能會覺得服務器也應該緩存一下吧,我沒有做服務器的緩存是因為我覺得客戶端緩存已經ok了,而且在本機調試的時候,每次頁面輸出都是在10毫秒之內,緩不緩存對用戶沒有很明顯的感覺。服務器我就不管啦~

最后,提供源文件下載。

原文鏈接:http://www.cnblogs.com/vinqon/archive/2011/05/02/2034459.html

【編輯推薦】

  1. 了解CSS的查找匹配原理 讓CSS更簡潔、高效
  2. 高性能WEB開發之JS、CSS的合并壓縮
  3. 強烈推薦40個優秀的免費CSS工具
  4. 強力推薦12組免費的CSS3按鈕
  5. 10 個漂亮的CSS 3表單制作教程
責任編輯:陳貽新 來源: 詠聰的博客
相關推薦

2012-02-16 10:12:23

JavaScript

2022-12-28 12:29:45

duf命令

2017-07-25 14:20:13

戴爾配置功耗

2011-03-09 09:25:12

CSS3

2022-03-30 15:11:26

Python房價工具

2013-03-29 14:46:33

App開發小工具輔助工具

2023-04-26 01:21:34

工具URL地址

2020-11-26 12:05:44

Python小工具代碼

2021-05-20 11:30:17

Python工具代碼

2019-10-31 10:43:05

Python 開發編程語言

2021-05-10 11:06:31

Python工具代碼

2020-08-25 20:10:53

GitHub代碼開發者

2017-05-23 20:44:36

Linux緩存工具

2009-11-19 08:48:10

Windows 7桌面工具

2021-11-05 06:57:50

架構工具代碼

2024-09-24 17:54:26

Python開發

2024-03-08 14:45:35

2022-10-09 14:35:31

python工具Linux

2017-05-03 13:37:05

Linuxweb性能監測

2020-06-19 09:40:57

程序員遠程開發者
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九热这里只有精品在线观看 | 日韩视频三区 | 在线观看亚 | 一级毛片成人免费看a | 奇米视频777 | 国产精品久久在线观看 | 久久久国产精品 | 精品欧美一区二区精品久久 | 免费的黄色片子 | 日韩中文字幕久久 | 精品视频一区二区三区四区 | 视频在线观看一区二区 | 99亚洲精品 | 亚洲一区二区三区观看 | 精品动漫一区 | 久久久亚洲一区 | 成人在线免费视频 | 亚洲第一网站 | 婷婷精品 | 精品在线看 | 国产免费色 | 午夜a√| 国产精品一区二区三区四区 | 午夜私人影院 | h视频在线观看免费 | 国产精品爱久久久久久久 | 欧美一区二区三区视频 | 六月色婷 | 日韩精品免费视频 | 国产精品免费在线 | 正在播放亚洲 | 伦理午夜电影免费观看 | 欧美www在线 | 午夜三区 | 激情视频一区 | 亚洲精品视频在线观看免费 | 欧美一卡二卡在线观看 | 久久久久九九九九 | 精品一区二区三区在线视频 | av片在线免费看 | 九九热国产视频 |