Gzip 是一種流行的檔案壓縮演算法,現在的應用十分廣泛,尤其是在 Linux 平台。當應用 Gzip 壓縮到一個純文字檔案時,效果是非常明顯的,大約可以減少 70%以上的檔案大小。這取決於檔案中的內容。
利用 Apache 中的 Gzip 模組,我們可以使用 Gzip 壓縮演算法來對 Apache 站羣服務器釋出的 WordPress 網頁內容進行壓縮後再傳輸到客户端瀏覽器。這樣經過壓縮後實際上降低了互聯網傳輸的位元組數,最明顯的好處就是可以加快 WordPress 網頁載入的速度。
WordPress 網頁載入速度加快的好處不言而喻,除了節省流量,改善使用者的瀏覽體驗外,另一個潛在的好處是 Gzip 與 SEO 站羣搜索引擎的抓取工具有著更好的關係。例如 Google 就可以通過直接讀取 gzip 檔案來比普通手工抓取更快地檢索 WordPress 網頁。在 Google 網站管理員工具(Google Webmaster Tools)中你可以看到,sitemap.xml.gz 是直接作為 Sitemap 被提交的。
而這些好處並不僅僅限於靜態內容,PHP 動態頁面和其他動態生成的內容均可以通過使用 Apache 壓縮模組壓縮,加上其他的效能調整機制和相應的站羣服務器端 WordPress 加速緩存規則,這可以大大提高網站的效能。
因此,對於部署在 Linux 站羣服務器上的 PHP 程式,在站羣服務器支援的情況下,我們建議你開啓使用 Gzip Web 壓縮。
二、 Gzip Web 壓縮工作原理
Web 站羣服務器處理 HTTP 壓縮的過程如下:
1. Web 站羣服務器接收到瀏覽器的 HTTP 請求後,檢查瀏覽器是否支援 HTTP 壓縮(Accept-Encoding 資訊);
2. 如果瀏覽器支援 HTTP 壓縮,Web 站羣服務器檢查請求檔案的字尾名;
3. 如果請求檔案是 HTML 、 CSS 等靜態檔案,Web 站羣服務器到壓縮緩衝目錄中檢查是否已經存在請求檔案的最新壓縮檔案;
4. 如果請求檔案的壓縮檔案不存在,Web 站羣服務器向瀏覽器返回未壓縮的請求檔案,並在壓縮緩衝目錄中存放請求檔案的壓縮檔案;
5. 如果請求檔案的最新壓縮檔案已經存在,則直接返回請求檔案的壓縮檔案;
6. 如果請求檔案是動態檔案,Web 站羣服務器動態壓縮內容並返回瀏覽器,壓縮內容不存放到壓縮 WordPress 加速緩存目錄中。
三、讓我們開始吧!
Apache 上利用 Gzip 壓縮演算法進行壓縮的模組有兩種:mod_gzip 和 mod_deflate 。要使用 Gzip Web 壓縮,請首先確定你的站羣服務器開啓了對這兩個元件之一的支援。在 Linux 站羣服務器上,現在已經有越來越多的 WordPress 主機空間商開放了對它們的支援,有的甚至是同時 支援這兩個模組的。例如目前 Godaddy 、 Bluehost 及 DreamHosts 等 WordPress 主機空間商的站羣服務器都已同時支援 mod_gzip 和 mod_deflate 。
雖然使用 Gzip 同時也需要客户端瀏覽器的支援,不過不用擔心,目前大部分瀏覽器都已經支援 Gzip 了,如 IE 、 Mozilla Firefox 、 Opera 、 Chrome 等。
通過檢視 HTTP 頭,我們可以快速判斷使用的客户端瀏覽器是否支援接受 gzip 壓縮。
若傳送的 HTTP 頭中出現以下資訊,則表明你的瀏覽器支援接受相應的 gzip 壓縮:
Accept-Encoding: gzip 支援 mod_gzip
Accept-Encoding: deflate 支援 mod_deflate
Accept-Encoding: gzip,deflate 同時支援 mod_gzip 和 mod_deflate
如果站羣服務器開啓了對 Gzip 元件的支援,那麼我們就可以在 http.conf 或.htaccess 裏面進行定製,下面是一個.htaccess 配置的簡單例項:
以下為引用的內容:
# mod_gzip:
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
以下為引用的內容:
# mod_deflate:
DeflateCompressionLevel 6 #壓縮率, 6 是建議值.
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE image/svg+xml
裏面的檔案 MIME 型別可以根據自己情況新增,至於 PDF 、圖片、音樂文件之類的這些本身都已經高度壓縮格式,重複壓縮的作用不大,反而可能會因為增加 CPU 的處理時間及瀏覽器的渲染問題而降低效能。所以就沒必要再通過 Gzip 壓縮。
通過以上設定後再檢視返回的 HTTP 頭,出現以下資訊則表明返回的資料已經過壓縮。即網站程式所配置的 Gzip 壓縮已生效。
Content-Encoding: gzip
注:不管使用 mod_gzip 還是 mod_deflate,此處返回的資訊都一樣。因為它們都是實現的 gzip 壓縮方式。
除此之外,還可以通過一些線上檢測工具(如:http://www.whatsmyip.org/http_compression/)來檢測你的網站內容是否已經過 Gzip 壓縮。