|
網(wǎng)站的訪問速度是由多個因素所共同決定的,這些因素例如應(yīng)用程序的響應(yīng)速度、網(wǎng)絡(luò)帶寬、服務(wù)器性能、與客戶端之間的網(wǎng)絡(luò)傳輸速度等等。其中最重要的一個因素是應(yīng)用程序本身的響應(yīng)速度,因此當你為網(wǎng)站性能所苦惱時,你第一個需要著手進行處理的便是盡可能的提升應(yīng)用程序的執(zhí)行速度,你可以使用緩存或者是優(yōu)化代碼的執(zhí)行效率來提升應(yīng)用程序的速度。 但是,本文并不是介紹如何來提升應(yīng)用程序的執(zhí)行效率,前面提到的只不過是為了防止您病急亂投醫(yī)。在確保您的應(yīng)用程序的性能已經(jīng)達到足夠好,同時服務(wù)器的性能也完全滿足的情況下,不妨來試試網(wǎng)頁壓縮來進一步提升網(wǎng)頁的瀏覽速度,而且非常重要的是,它完全不需要任何的成本,只不過是會讓您的服務(wù)器CPU占用率稍微提升一兩個百分點而已或者更少。 網(wǎng)頁壓縮是一項由WEB服務(wù)器和瀏覽器之間共同遵守的協(xié)議,也就是說WEB服務(wù)器和瀏覽器都必須支持該技術(shù),所幸的是現(xiàn)在流行的瀏覽器都是支持的,包括IE、FireFox、Opera等;服務(wù)器有Apache和IIS等。雙方的協(xié)商過程如下: 1. 首先瀏覽器請求某個URL地址,并在請求的頭(head)中設(shè)置屬性accept-encoding值為gzip,deflate,表明瀏覽器支持gzip和deflate這兩種壓縮方式(事實上deflate也是使用gzip壓縮協(xié)議,下面我們會介紹二者之間的區(qū)別); 在實際的應(yīng)用中我們發(fā)現(xiàn)壓縮的比率往往在3到10倍,也就是本來50k大小的頁面,采用壓縮后實際傳輸?shù)膬?nèi)容大小只有5至15k大小,這可以大大節(jié)省服務(wù)器的網(wǎng)絡(luò)帶寬,同時如果應(yīng)用程序的響應(yīng)足夠快時,網(wǎng)站的速度瓶頸就轉(zhuǎn)到了網(wǎng)絡(luò)的傳輸速度上,因此內(nèi)容壓縮后就可以大大的提升頁面的瀏覽速度。 接下來我們介紹幾種常用的環(huán)境下如何啟用網(wǎng)頁壓縮功能。 1. 純Tomcat服務(wù)器 如果您的WEB應(yīng)用程序是跑在Tomcat服務(wù)器下的,而且直接使用Tomcat所提供的HTTP服務(wù),那建議你馬上動手,因為實在是太簡單了,你只需要在server.xml配置文件中給HTTP Connector增加一個compression的參數(shù)值為on并重啟Tomcat服務(wù)器就立刻生效,配置如下:
Tomcat采用的是HTTP/1.1的GZIP壓縮協(xié)議,它會根據(jù)瀏覽器送過來的請求中的accept-encoding值是否包含gzip來判斷瀏覽器是否支持gzip壓縮協(xié)議,如果瀏覽器支持就啟用gzip壓縮,否則就不進行任何壓縮處理。Tomcat中還有另外一個參數(shù)compressableMimeType,這個參數(shù)可以用來指定壓縮哪種類型的內(nèi)容,例如可以指定該配置值為:text/html,text/plain ,則只壓縮contentType為text/html和text/plain的頁面,不過您最好也將css和javascript文件也算在壓縮的文件類型中,因為這兩者的壓縮效果也十分的明顯。 2. Apache服務(wù)器 在apache1.3版本,大家常用mod_gzip對輸出內(nèi)容進行壓縮,現(xiàn)在主流的瀏覽器都支持gzip解壓縮。在apache2下,這個模塊換名為mod_deflate,對應(yīng)的模塊文件名是mod_deflate.so。mod_gzip本文不做介紹,下面描述一下在Apache2下如何啟用并配置mod_deflate模塊。默認安裝的Apache不管是Windows還是Linux/Unix,都是不啟用該模塊的, Linux/Unix下甚至不帶該模塊,你需要手工編譯這個模塊。 下面我們分別介紹在Windows和Linux操作系統(tǒng)下如何啟用并配置mod_deflate模塊。 在Windows下采用安裝程序安裝的Apache服務(wù)器已經(jīng)帶有deflate所需要的模塊 mod_deflate.so和mod_headers.so,我們只需要在httpd.conf配置文件中啟用并進行相關(guān)的配置即可,配置如下: LoadModule deflate_module modules/mod_deflate.so 而如果是Linux/Unix操作系統(tǒng),如果你沒有在編譯安裝的過程中將所需要的兩個模塊mod_deflate和mod_headers編譯進去的話,那就稍微有點麻煩,首先我們先看如何在編譯安裝Apache過程中也同時編譯這兩個模塊,請在執(zhí)行configure程序時增加兩個參數(shù)分別是 # ./configure --enable-deflate --enable-headers 這樣在編譯完Apache后就可以直接在httpd.conf中啟用并配置deflate模塊了,配置的方法跟Windows平臺下是相同的。 如果說您的Apache已經(jīng)在運行了,不想再重新編譯一次,那也可以選擇只編譯deflate模塊所需的文件mod_deflate.c和mod_headers.c。這兩個文件位于{apache-src}/modules/filters/目錄下(其中{apache-src}為apache源文件所在的目錄)。使用如下命令來單獨編譯這兩個源文件。 # {apache-bin}/apxs -i -a -c {apache-src}/modules/filters/mod_deflate.c 其中{apache-bin}為Apache安裝目錄下的bin目錄,接下來在httpd.conf直接配置該模塊即可。 很多時候你在單獨編譯deflate模塊的時候可能會碰到編譯錯誤,提示是: Cannot load /opt/apache/modules/mod_deflate.so into server: /opt/apache/modules/mod_deflate.so: undefined symbol: deflate 解決的方法如下: 編輯/usr/local/apache2/bin/apr-config文件修改其中的LDFLAGS值為"-lz" 為了省卻不必要的麻煩,請盡量在編譯安裝時直接加上--enable-deflate --enable-headers參數(shù)。 3. IIS服務(wù)器 微軟的IIS服務(wù)器同樣也是目前用得最多的WEB服務(wù)器之一,而且用來運行ASP頁面也是必不可少的。IIS6本身支持gzip壓縮,IIS5就比較費勁了,你可以找一些第三方的組件來處理,例如httpzip,網(wǎng)址是:http://www./products/httpzip/?vid=3354166,不過這玩意是收費的。接下來我們介紹如何在IIS6中啟用壓縮功能。 打開Internet信息服務(wù)(IIS)管理器,右擊"網(wǎng)站"->"屬性",選擇"服務(wù)"。在"HTTP壓縮"框中選中"壓縮應(yīng)用程序文件"和"壓縮靜態(tài)文件",按需要設(shè)置"臨時目錄"和"臨時目錄的最大限制",如下圖所示:
接下來配置gzip組件,在Internet信息服務(wù)(IIS)管理器,點擊"Web服務(wù)擴展"->"增加一個新的Web服務(wù)擴展...",在"新建Web服務(wù)擴展"框中輸入擴展名"HTTP Compression",添加"要求的文件"為C:\WINDOWS\system32\inetsrv\gzip.dll,選中"設(shè)置擴展狀態(tài)為允許",如下圖所示:
還沒完呢,我們還需要修改一個配置文件,修改之前請先停止IIS服務(wù),打開C:\Windows\System32\inetsrv\MetaBase.xml,這個文件很大,找到下面一段信息:
增加一些要進行壓縮的文件后綴,其中HcFileExtensions是靜態(tài)文件的擴展名,增加js和css等;HcScriptFileExtensions為動態(tài)文件的擴展名,增加aspx,保存后啟動IIS即可生效。 最后我們介紹如何來測試前面所做的工作是否起效,你可能會覺得很奇怪,配置好了,用瀏覽器打開頁面正常,查看頁面源碼,內(nèi)容并沒有變化,大小也跟原來一樣,怎么回事呢?這是因為瀏覽器已經(jīng)把內(nèi)容解壓了的結(jié)果,有兩個方法來判斷壓縮是否生效:第一,查看WEB服務(wù)器的日志,不管是Apache或者是IIS,二者的訪問日志格式都差不多是下面這種格式: 127.0.0.1 - - [14/May/2006:08:44:28 +0800] "GET /manual/style/css/manual.css HTTP/1.1" 200 19351 最后兩個數(shù)字分別是HTTP的結(jié)果碼(200表示OK),19351表示的是響應(yīng)內(nèi)容的大小,把這個大小跟你在瀏覽器上查看源碼的大小比較一下就可以知道是否生效。另外一種方法就是自己寫一個HTTP客戶端的小程序并設(shè)置Accept-Encoding的值為gzip,deflate,由這個程序去請求服務(wù)器端的某個URL地址,然后打印出響應(yīng)的內(nèi)容,如果是一堆亂碼,恭喜你,配置成功。下面是一段Java寫的測試客戶端代碼(需要用到commons-httpclient包): HttpClient http = new HttpClient(); 相關(guān)網(wǎng)址 Apache http://httpd. |
|
|
來自: jimmylin88cn > 《壓縮算法》