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 压缩。