1. HTTP压缩概述 HTTP压缩是在Web服务器和浏览器间传输压缩文本内容的方法。HTTP压缩采用通用的压缩算法如gzip等压缩HTML、JavaScript或CSS文件。
2. HTTP压缩工作原理 Web服务器处理HTTP压缩的工作原理如下:
Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩; 如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名; 如果请求文件是HTML、CSS等静态文件,Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件; 如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件; 如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件; 如果请求文件是ASPX等动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。
3. IIS 6.0中配置HTTP压缩的步骤 IIS 6.0中配置HTTP压缩的步骤如下:
1. 打开Internet信息服务(IIS)管理器,右击'网站'(不是默认网站哦)->'属性',选择'服务'。在'HTTP压缩'框中选中'压缩应用程序文件'和'压缩静态文件',按需要设置'临时目录'和'临时目录的最大限制';
2.在Internet信息服务(IIS)管理器,右击'Web服务扩展'->'增加一个新的Web服务扩展...',在'新建Web服务扩展'框中输入扩展名'HTTP Compression',添加'要求的文件'为C:/WINDOWS/system32/inetsrv/gzip.dll,其中Windows系统目录根据您的安装可能有所不同,选中'设置扩展状态为允许';
3.打开'开始'->'管理工具'->'服务',停止'IIS Admin Service'后,
使用文本编辑器打开C:/Windows/System32/inetsrv/MetaBase.xml(建议先备份),
找到Location ='/LM/W3SVC/Filters/Compression/gzip',
如果需要压缩动态文件,则将HcDoDynamicCompression设置为'TRUE',并在HcScriptFileExtensions中增加您要压缩的动态文件后缀名,如aspx;
如果需要压缩静态文件,则将HcDoStaticCompression和HcDoOnDemandCompression设置为'TRUE',并在HcFileExtensions中增加您需要压缩的静态文件后缀名,如xml、css、js等;
HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的压缩率,数字越小压缩率越低,一般设为9最为合适; 编辑完毕后保存MetaBase.xml文件;
然后,重新启动IIS。
最后,外网的访问速度的确有质的提高,内网更不用说了。。happpy。。。这是代码艺术之上的另一种技术。。。
another way is :
在網頁開發上,由於AJAX的概念興起,Javascript的應用變的愈來愈廣泛,是面上的Javascript libraries也愈來愈多了,而這些Javascript的使用帶來了高操作性與部分刷新的優點,但相對的也將使用者第一次開啟網頁的下載流量提升了很多,已jQuery為例,最簡單的jQuery的js檔就約40-50k,對網路狀況不好的使用者來說,是太多了。
而如果我們使用 aspx、asp等動態網頁進行設計,這些網頁的內容會隨著使用者的不同而改變,因此cache的效果並不會特別好,一個複雜的ERP表單,光是網頁的原始碼量可能就高達200kb也說不定,當一次刷新的流量高達200kb時,在Internet的環境下,相信怎麼跑也很難跑的順暢。
若js的引用與網頁的複雜度都是目前所必需,那我們只有另闢蹊徑來解決效能的問題,兩年前在網路上找尋到以下的設定方式,透過IIS進行網頁內容的壓縮,壓縮的效果非常好,200kb的網頁,經過壓縮後約只剩下40kb,所以我們也一直沿用至今。
該壓縮是透過Gzip這個元件來進行,將IIS所response文件進行壓縮,傳到client端後再由client進行解壓縮,整個過程我們的程式都不用修正,算是非常的方便,以下是如何設定網頁的壓縮:
【IIS6.0的設定】
1. 開啟Internet 服務管理員-->網站-->內容-->服務。在 HTTP壓縮框中勾選 "壓縮應用程式檔案(Compress application files)" 和 "壓縮靜態檔案(Compress static files)",如下圖所示:
2. 接下來配置 GZip 元件,在網際網路資訊服務(IIS)管理員,點擊網頁服務延伸-->增加一個新的網頁服務延伸,在 "新增網頁服務延伸" 框中輸入延伸名稱 "IIS Compression",選擇"需要的檔案" 為 C:/WINDOWS/system32/inetsrv/gzip.dll,並設定為 "允許",若無啟動此功能,則所設定之參數並不會產生效用.如下圖所示:
3. 停用IIS相關服務,與IIS執行相關的服務共有三個HTTP SSL、IIS Admin、World Wide Web Publishing,請將這三個服務都停止。
4. 打開 C:/Windows/System32/inetsrv/MetaBase.xml,在修改前請先備份(切記),這個檔案很大,找到下面一段內容:
01 | < IIsCompressionScheme Location = "/LM/W3SVC/Filters/Compression/deflate" |
02 | HcCompressionDll = "%windir%/system32/inetsrv/gzip.dll" |
03 | HcCreateFlags = "0" |
04 | HcDoDynamicCompression = "TRUE" |
05 | HcDoOnDemandCompression = "TRUE" |
06 | HcDoStaticCompression = "FALSE" |
07 | HcDynamicCompressionLevel = "0" |
08 | HcFileExtensions = "htm html txt" |
09 | HcOnDemandCompLevel = "0" |
10 | HcPriority = "1" |
11 | HcScriptFileExtensions = "asp dll exe" /> |
12 | =========================================================== |
13 | < IIsCompressionScheme Location = "/LM/W3SVC/Filters/Compression/gzip" |
14 | HcCompressionDll = "%windir%/system32/inetsrv/gzip.dll" |
15 | HcCreateFlags = "1" |
16 | HcDoDynamicCompression = "TRUE" |
17 | HcDoOnDemandCompression = "TRUE" |
18 | HcDoStaticCompression = "TRUE" |
19 | HcDynamicCompressionLevel = "0" |
20 | HcFileExtensions = "htm html txt" |
21 | HcOnDemandCompLevel = "0" |
22 | HcPriority = "1" |
23 | HcScriptFileExtensions = "asp dll exe" /> |
各參數所代表的意義
- HcDoDynamicCompression:是否壓縮動態文件
- HcDoStaticCompression、HcDoOnDemandCompression:是否壓縮靜態文件
- HcDynamicCompressionLevel、HcOnDemandCompLevel:表示需要的壓縮率,數字越小壓縮率越低
- HcScriptFileExtensions:要壓縮的動態文件副檔名
- HcFileExtensions:要壓縮的靜態文件副檔名
找到以上的資訊後,請分別將兩段的屬性更改為:
- HcDynamicCompressionLevel="10"
- HcFileExtensions="htm html txt css js "
- HcScriptFileExtensions="asp dll exe aspx"
5. 儲存 C:/Windows/System32/inetsrv/MetaBase.xml,如果發生無法存檔的問題,請檢查前一步驟中是否有正確的將三個服務停止。
6. 重新啟動步驟3中停用的三個服務。
7. 開啟系統進行測試。
【IIS7.0的設定】
上面複雜的設定在IIS7.0就簡單多囉,有GUI的畫面可以使用整個感覺就很優:
1.找到IIS-->Compression
2.設定壓縮細節
- Enable dynamic content compression:壓縮動態檔案如aspx、asp等...
- Enable static content compression:壓縮靜態檔案如htm、js、css等...
- Only compress files larger than(in bytes):只有在檔案超過多大時才壓縮...
- Per application pool disk space limit(in MB):壓縮後的檔案會被cache住,設定其cache的最大容量...
網頁壓縮的設定在IIS7.0預設是啟用的,而且設定起來比IIS6.0簡單很多,而既然微軟敢將此功能作為預設值,我想也是對其架構有一定的把握度吧。