摘要:gzip是GNUzip的縮寫,它是一個(gè)GNU自由軟件的文件壓縮程序。它是Jean-loupGailly和MarkAdler一起開發(fā)的。第一次公開發(fā)布版本是1992年10月31日發(fā)布的版本0.1,199...
一、GZIP概念
GZIP最早由Jean-loup Gailly和Mark Adler創(chuàng)建,用于UNⅨ系統(tǒng)的文件壓縮。我們?cè)?a href="http://m.448gfe.cn/tags-564.html" target="_blank">Linux中經(jīng)常會(huì)用到后綴為.gz的文件,它們就是GZIP格式的,F(xiàn)今已經(jīng)成為Internet 上使用非常普遍的一種數(shù)據(jù)壓縮格式,或者說一種文件格式。
HTTP協(xié)議上的GZIP編碼是一種用來改進(jìn)WEB應(yīng)用程序性能的技術(shù)。大流量的WEB站點(diǎn)常常使用Gzip壓縮技術(shù)來讓用戶感受更快的速度。這一般是指WWW服務(wù)器中安裝的一個(gè)功能,當(dāng)有人來訪問這個(gè)服務(wù)器中的網(wǎng)站時(shí),服務(wù)器中的這個(gè)功能就將網(wǎng)頁(yè)內(nèi)容壓縮后傳輸?shù)絹碓L的電腦瀏覽器中顯示出來.一般對(duì)純文本內(nèi)容可壓縮到原大小的40%.這樣傳輸就快了,效果就是你點(diǎn)擊網(wǎng)址后會(huì)很快的顯示出來.當(dāng)然這也會(huì)增加服務(wù)器的負(fù)載. 一般服務(wù)器中都安裝有這個(gè)功能模塊的。
二、gzip 命令
減少文件大小有兩個(gè)明顯的好處,一是可以減少存儲(chǔ)空間,二是通過網(wǎng)絡(luò)傳輸文件時(shí),可以減少傳輸?shù)臅r(shí)間。gzip 是在 Linux 系統(tǒng)中經(jīng)常使用的一個(gè)對(duì)文件進(jìn)行壓縮和解壓縮的命令,既方便又好用。
語法:gzip [選項(xiàng)] 壓縮(解壓縮)的文件名
該命令的各選項(xiàng)含義如下:
-c 將輸出寫到標(biāo)準(zhǔn)輸出上,并保留原有文件。
-d 將壓縮文件解壓。
-l 對(duì)每個(gè)壓縮文件,顯示下列字段:
壓縮文件的大;未壓縮文件的大。粔嚎s比;未壓縮文件的名字
-r 遞歸式地查找指定目錄并壓縮其中的所有文件或者是解壓縮。
-t 測(cè)試,檢查壓縮文件是否完整。
-v 對(duì)每一個(gè)壓縮和解壓的文件,顯示文件名和壓縮比。
-num 用指定的數(shù)字 num 調(diào)整壓縮的速度,-1 或 --fast 表示最快壓縮方法(低壓縮比),
-9 或--best表示最慢壓縮方法(高壓縮比)。系統(tǒng)缺省值為 6。
指令實(shí)例:
gzip *
% 把當(dāng)前目錄下的每個(gè)文件壓縮成 .gz 文件。
gzip -dv *
% 把當(dāng)前目錄下每個(gè)壓縮的文件解壓,并列出詳細(xì)的信息。
gzip -l *
% 詳細(xì)顯示例1中每個(gè)壓縮的文件的信息,并不解壓。
gzip usr.tar
% 壓縮 tar備份文件usr.tar,此時(shí)壓縮文件的擴(kuò)展名為.tar.gz。
三、快速啟動(dòng)
在WordPress中雖然有插件可以啟動(dòng)Gzip網(wǎng)頁(yè)壓縮,不過能通過幾句語法來達(dá)到網(wǎng)頁(yè)壓縮,這樣不是更好嗎?其實(shí)在PHP中,有一句語法是可以開啟Gzip的,只要加在網(wǎng)頁(yè)輸出的前端即可。在WordPress中,其實(shí)大部分的緩存插件都有內(nèi)建啟動(dòng)Gzip壓縮功能,不論是老牌的緩存插件WP Super Cache、輕巧的1 Blog Cacher或是hyper Cache都可以啟動(dòng)Gzip網(wǎng)頁(yè)壓縮功能。如果你沒有裝這些插件,或是這些插件雖然啟動(dòng)了Gzip功能但是檢測(cè)出來卻沒有壓縮,那你可能需要通過插件GZippy來啟動(dòng),不過通過這個(gè)插件來啟動(dòng)時(shí),記得緩存插件本身的Gzip要關(guān)掉,否則可能造成沖突。
第一步:打開IIS,啟用HTTP壓縮服務(wù)
右擊“網(wǎng)站”->“屬性”,選擇“服務(wù)”。在“HTTP壓縮”框中選中“壓縮應(yīng)用程序文件”和“ 壓縮靜態(tài)文件”,按需要設(shè)置“臨時(shí)目錄”和“臨時(shí)目錄的最大限制”;
第二步:?jiǎn)⒂脀eb服務(wù)
第三步:修改metaBase.xml
開始 > 運(yùn)行中輸入 c:\windows\system32\inetsrv,找到 MeteBase.xml,先備份,再修改。(有的服務(wù)器不需要修改此文件便可以使用)
IIS或Apache啟用GZIP壓縮優(yōu)化網(wǎng)站
先來了解一下GZIP,gzip是GNU zip的縮寫,它是一個(gè)GNU自由軟件的文件壓縮程序,也經(jīng)常用來表示gzip這種文件格式。軟件的作者是Jean-loupGailly和Mark Adler。1992年10月31日第一次公開發(fā)布,版本號(hào)是0.1,目前的穩(wěn)定版本是1.2.4。
gzip可以極大的加速網(wǎng)站.有時(shí)壓縮比率高達(dá)80%,近來測(cè)試了一下,最少都有40%以上,還是相當(dāng)不錯(cuò)的.在Apache2之后的版本,模塊名不叫g(shù)zip,而叫mod_deflate
1、Apache啟用gzip
如果要開啟gzip的話,一定要打開下面二個(gè)模塊.
LoadModule headers_module modules/mod_headers. so
LoadModule deflate_module modules/mod_deflate. so
設(shè)置壓縮比率,取值范圍在 1(最低) 到 9(最高)之間,不建議設(shè)置太高,雖然有很高的壓縮率,但是占用更多的CPU資源.
DeflateCompressionLevel 3
AddOutputFilter DEFLATE HTML xml php js css
<Location />
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \\.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary #對(duì)代理的設(shè)置
</Location>
下面二個(gè)測(cè)試網(wǎng)站
測(cè)試數(shù)據(jù)對(duì)css
Original Size: 44 KB
Gzipped Size: 10 KB
Data Savings: 77.27%
測(cè)試數(shù)據(jù)js
Original Size: 6 KB
Gzipped Size: 2 KB
Data Savings: 66.67%
測(cè)試數(shù)據(jù)php
Original Size: 62 KB
Gzipped Size: 15 KB
Data Savings: 75.81%
上面只是隨機(jī)拿的幾個(gè)數(shù)據(jù),看的出來,使用了gzip壓縮后文件小多了.
另外講一下,有關(guān)squid對(duì)gzip的處理
在squid中,對(duì)同一個(gè)URL只保留一份緩存。對(duì)于如果不同browser(是否支持壓縮)如果頻繁交替訪問,例如:對(duì)某個(gè)cache住的目標(biāo),一個(gè)http/1.0請(qǐng)求可能會(huì)導(dǎo)致squid強(qiáng)制更新其緩存。但接下來的另一個(gè)http/1.1請(qǐng)求又會(huì)導(dǎo)致squid再次更新緩存。這樣那squid緩存數(shù)據(jù)就要頻繁更新,這就極大的降低了cache命中率。
不過還好,現(xiàn)實(shí)環(huán)境中不支持壓縮的browser畢竟是很少的情況,所以對(duì)于緩存命中率的降低很有限.
這個(gè)神通廣大的模塊就是mod_gzip.它通過用和gzip一樣的壓縮算法對(duì)apache發(fā)出的頁(yè)面進(jìn)行壓縮,可能的話可以把頁(yè)面壓縮成為原來大小的十份之一。哪,如果10K的頁(yè)面只要傳1K這不就是提速10倍嘛。當(dāng)然一般網(wǎng)頁(yè)只可以達(dá)到3-6倍。那也很不錯(cuò)。對(duì)吧。連google這樣一個(gè)大的網(wǎng)站都采用這個(gè)技術(shù)。你還不快跟上?
這樣一個(gè)好東東,來來來,我告訴你如何安裝:分3步,1、下載,2、修改配置,3、測(cè)試。
安裝,配置
把mod_gzip放到你的apache的源代碼目錄下,新建一個(gè)mod_gzip目錄如果需要補(bǔ)丁(針對(duì)1.3.17. la版) 還需運(yùn)行:
patch mod_gizp.c
按你需要,在配置中選擇動(dòng)態(tài)DSO或靜態(tài)編譯進(jìn)apache系統(tǒng)。如何處理在README中講得很清楚,如-add-module=mod_gzip.c,make,make install等等。這里不多講。
把下列配置加入httpd.conf尾部。
# MOD_GZIP configuration
mod_gzip_on Yes
mod_gzip_minimum_file_size 1002
mod_gzip_maximum_file_size 0
mod_gzip_maximum_inmem_size 60000
mod_gzip_item_include mime "application/x-httpd-php"
mod_gzip_item_include mime text/*
mod_gzip_item_include mime "httpd/unix-directory"
mod_gzip_dechunk Yes
mod_gzip_temp_dir "/tmp"
mod_gzip_keep_workfiles No
mod_gzip_item_include file ".php3$"
mod_gzip_item_include file ".txt$"
mod_gzip_item_include file ".html$"
mod_gzip_item_exclude file ".css$"
mod_gzip_item_exclude file ".js$"
在保存修改后運(yùn)行
…/bin/apachectl configtest確保配置修改無誤。
然后用apachectl restart 指令重起服務(wù)。
修改,測(cè)試
在宣布做好了之前在測(cè)試一下是優(yōu)秀程序員的習(xí)慣。為了盡量不影響你的用戶的瀏覽,我們可以用把新的apache驅(qū)動(dòng)在8080端口上或者用指令控制mod_gzip起作用的目錄,而不是一下子全用mod_gzip.
用法如下:
MOD_GZIP configuration
沒有問題后你就可以讓你的用戶很開心的發(fā)現(xiàn)’XX網(wǎng)站現(xiàn)在好快哦!
Mod_gzip真的很神奇,100K的HTML大 文檔只要12K就可以傳到用戶端了。越先采用這個(gè)技術(shù)你的用戶對(duì)你的網(wǎng)站的高速度印象就越深。不過有所得必有所失,由于解壓是在客戶端進(jìn)行的,效果和用戶 的瀏覽器有一定關(guān)系。
2、IIS啟用gzip
現(xiàn)代的瀏覽器IE6和Firefox都支持客戶端Gzip,也就是說,在服務(wù)器上的網(wǎng)頁(yè),傳輸之前,先使用Gzip壓縮再傳輸給客戶端,客戶端接收之后由瀏覽器解壓顯示,這樣雖然稍微占用了一些服務(wù)器和客戶端的CPU,但是換來的是更高的帶寬利用率。對(duì)于純文本來講,壓縮率是相當(dāng)可觀的。如果每個(gè)用戶節(jié)約50%的帶寬,那么你租用來的那點(diǎn)帶寬就可以服務(wù)多一倍的客戶了。
ⅡS6已經(jīng)內(nèi)建了Gzip壓縮的支持,可惜,沒有設(shè)置更好的管理界面。所以要打開這個(gè)選項(xiàng),還要費(fèi)些功夫。
在服務(wù)器中新建一個(gè)文件夾,名稱任意,給本機(jī)用戶添加寫入權(quán)限。
進(jìn)入IIS管理器,IIS管理器>網(wǎng)站 右鍵進(jìn)入“屬性”面板,切換到“服務(wù)”選項(xiàng)卡,勾選HTTP壓縮中兩項(xiàng),如果僅僅想壓縮靜態(tài)文件,那么第一項(xiàng)就算了。臨時(shí)目錄就是剛才新建的那個(gè)文件夾。
確認(rèn)后進(jìn)入IIS管理器>Web服務(wù)擴(kuò)展,點(diǎn)擊“添加一個(gè)新的Web服務(wù)擴(kuò)展”,在彈出的面板中首先輸入擴(kuò)展名,名稱任意;然后在“要求的文件”中添加文件,其實(shí)就是輸入gzip.dll所在的路徑。如果不是特立獨(dú)行的服務(wù)器,那么這個(gè)位置基本上就是“C:WINDOWSsystem32inetsrvgzip.dll”,確認(rèn)后記得將“設(shè)置擴(kuò)展?fàn)顟B(tài)為允許”勾選。
進(jìn)入C:WINDOWSsystem32inetsrv這個(gè)目錄下,找到一個(gè)叫MetaBase.xml的文件,直接修改保存是不行的,因?yàn)镮IS服務(wù)正在使用該文件。強(qiáng)烈建議先備份該文件,再在一個(gè)副本上修改。用文本編輯器打開副本,用查找功能找到“IIsCompressionScheme”,共有3處,都在一起,分別是deflate、gzip和Parameters,deflate也是一種壓縮格式,不過性能上不如gzip。需要修改的是deflate和gzip這兩段,參數(shù)基本一樣,都要修改。
HcDynamicCompressionLevel是用來設(shè)置壓縮率,默認(rèn)是0,最高是10。低壓縮級(jí)別生成稍大一些的壓縮文件,但對(duì) CPU 和內(nèi)存資源的總體影響較小。高壓縮級(jí)別通常會(huì)生成較小的壓縮文件,但會(huì)占用較多的 CPU 時(shí)間和內(nèi)存。有人說設(shè)置成9性價(jià)比最高。
HcFileExtensions是用來設(shè)置壓縮的靜態(tài)文件擴(kuò)展名,默認(rèn)是htm、html、txt,根據(jù)網(wǎng)站的自身情況添加擴(kuò)展名,最基本的是js、css。添加時(shí)注意原有的換行格式。
HcScriptFileExtensions是用來設(shè)置壓縮的動(dòng)態(tài)文件擴(kuò)展名,默認(rèn)是asp、dll和exe,根據(jù)需要自行添加擴(kuò)展名,無外乎aspx、php等?梢詫⑦@一項(xiàng)的默認(rèn)刪除留空,這樣所有的動(dòng)態(tài)響應(yīng)都以壓縮方式發(fā)送。另外,還將動(dòng)態(tài)壓縮 HcFileExtensions 中所有未指定的靜態(tài)文件類型,并且因此不將它們放入緩存。同樣地,必須將 HcDoDynamicCompression 設(shè)置為 true,以進(jìn)行動(dòng)態(tài)壓縮。
把IIS服務(wù)停止,用剛才保存的副本替換原有的MetaBase.xml
重啟IIS服務(wù),如果一切正確,那么Gzip就啟動(dòng)了。
可以在這個(gè)地址檢測(cè)Gzip的工作情況。
置文件在windows目錄下的system32/inetsrv/metabase.xml
找到"/LM/W3SVC/Filters/Compression/deflate"和Location ="/LM/W3SVC/Filters/Compression/gzip"
兩個(gè)配置段內(nèi)均有HcDynamicCompressionLevel="5",請(qǐng)選擇你認(rèn)為合適的數(shù)值,這里我設(shè)置的是5.
如果要對(duì)動(dòng)態(tài)網(wǎng)頁(yè)進(jìn)行壓縮,則要修改如下配置項(xiàng)
HcScriptFileExtensions="asp
dll
exe"
將你要壓縮的文件的擴(kuò)展名填進(jìn)去就可以了。
特別提示:這種壓縮優(yōu)化流量的方法,對(duì)于文本文件比較有效,大約能壓縮50%(我一個(gè)200k左右的頁(yè)面包含js和css壓縮后118k左右),圖片則效果很差。另外壓縮比高對(duì)于服務(wù)器來說也會(huì)導(dǎo)致cpu負(fù)載過高,所以建議不要設(shè)置太高的壓縮比。
修改配置文件時(shí)請(qǐng)暫停IIS服務(wù),保存后重新啟動(dòng)服務(wù)即可。
用Nginx的gzip模塊提升網(wǎng)站訪問效率
Nginx自帶的有g(shù)zip模塊,這個(gè)模塊支持在線實(shí)時(shí)壓縮輸出數(shù)據(jù)流。經(jīng)過良好的配置優(yōu)化,可以大幅的提升網(wǎng)站的輸出效率。
效果顯而易見。
四、指令
[#gzip gzip] [#gzip_buffers gzip_buffers] [#gzip_comp_level gzip_comp_level] [#gzip_min_length gzip_min_length] [#gzip_http_version gzip_http_version] [#gzip_proxied gzip_proxied] [#gzip_types gzip_types]
五、指令詳解
gzip
語法:gzip on|off
默認(rèn)值:gzip off
作用域:http,server,location,if (x) location
開啟或者關(guān)閉gzip模塊
gzip_buffers
語法:gzip_buffers number size
默認(rèn)值:gzip_buffers 4 4k/8k
作用域:http,server,location
設(shè)置系統(tǒng)獲取幾個(gè)單位的緩存用于存儲(chǔ)gzip的壓縮結(jié)果數(shù)據(jù)流。例如 4 4k 代表以4k為單位,按照原始數(shù)據(jù)大小以4k為單位的4倍申請(qǐng)內(nèi)存。4 8k 代表以8k為單位,按照原始數(shù)據(jù)大小以8k為單位的4倍申請(qǐng)內(nèi)存。
如果沒有設(shè)置,默認(rèn)值是申請(qǐng)跟原始數(shù)據(jù)相同大小的內(nèi)存空間去存儲(chǔ)gzip壓縮結(jié)果。
gzip_comp_level
語法:gzip_comp_level 1..9
默認(rèn)值:gzip_comp_level 1
作用域:http,server,location
gzip壓縮比,1 壓縮比最小處理速度最快,9 壓縮比最大但處理最慢(傳輸快但比較消耗cpu)。
gzip_min_length
語法:gzip_min_length length
默認(rèn)值:gzip_min_length 0
作用域:http,server,location
設(shè)置允許壓縮的頁(yè)面最小字節(jié)數(shù),頁(yè)面字節(jié)數(shù)從header頭中的Content-Length中進(jìn)行獲取。
默認(rèn)值是0,不管頁(yè)面多大都?jí)嚎s。
建議設(shè)置成大于1k的字節(jié)數(shù),小于1k可能會(huì)越壓越大。即: gzip_min_length 1024
gzip_http_version
語法:gzip_http_version 1.0|1.1
默認(rèn)值:gzip_http_version 1.1
作用域:http,server,location
識(shí)別http的協(xié)議版本。由于早期的一些瀏覽器或者h(yuǎn)ttp客戶端,可能不支持gzip自解壓,用戶就會(huì)看到亂碼,所以做一些判斷還是有必要的。注:21世紀(jì)都來了,現(xiàn)在除了類似于百度的蜘蛛之類的東西不支持自解壓,99.99%的瀏覽器基本上都支持gzip解壓了,所以可以不用設(shè)這個(gè)值,保持系統(tǒng)默認(rèn)即可。
gzip_proxied
語法:gzip_proxied [off|expired|no-cache|no-store|private|no_last_modified|no_eTag|auth|any] ...
默認(rèn)值:gzip_proxied off
作用域:http,server,location
Nginx作為反向代理的時(shí)候啟用,開啟或者關(guān)閉后端服務(wù)器返回的結(jié)果,匹配的前提是后端服務(wù)器必須要返回包含"Via"的 header頭。
off - 關(guān)閉所有的代理結(jié)果數(shù)據(jù)的壓縮 expired - 啟用壓縮,如果header頭中包含 "Expires" 頭信息 no-cache - 啟用壓縮,如果header頭中包含 "Cache-Control:no-cache" 頭信息 no-store - 啟用壓縮,如果header頭中包含 "Cache-Control:no-store" 頭信息 private - 啟用壓縮,如果header頭中包含 "Cache-Control:private" 頭信息 no_last_modified - 啟用壓縮,如果header頭中不包含 "Last-Modified" 頭信息 no_etag - 啟用壓縮,如果header頭中不包含 "ETag" 頭信息 auth - 啟用壓縮,如果header頭中包含 "Authorization" 頭信息 any - 無條件啟用壓縮
gzip_types
語法:gzip_types mime-type [mime-type ...]
默認(rèn)值:gzip_types text/html
作用域:http,server,location
匹配MIME類型進(jìn)行壓縮,(無論是否指定)"text/html"類型總是會(huì)被壓縮的。
注意:如果作為http server來使用,主配置文件中要包含文件類型配置文件
http{ include conf/mime.types; ......}
如果你希望壓縮常規(guī)的文件類型,可以寫成這個(gè)樣子
http {
include conf/mime.types;
gzip on;: gzip_min_length 1000;
gzip_buffers 4 8k; : gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/html application/xml;
......
}
轉(zhuǎn)載請(qǐng)保留原文地址: http://m.448gfe.cn/show-244.html