静态 gzip 文件输出——在 PHP & Apache 环境下

转载

一个月前看到 [url=http://www.livid.cn/doc_view.php?doc_id=1751]livid 的《关于本站的那些 .livid 结尾的文件》[/url]还觉得没什么用,现在终于开始有用得着这些东西的地方了。

gzip 压缩输出是个好东西,但自己网站的 100ip/天,用不上。想到正在改版的东西每天的 log 文件都有几百 MB 的时候,及时知道了 gzip 的静态输出是很有好处的。

生成有一个现成的函数 [url=http://cn.php.net/manual/zh/function.gzencode.php]gzencode[/url],直接把一个字符串 gzip 后存成一个 .pt(或者随便什么别的扩展名)的文件

[phpcode]
$sHtml = "Compress me";
$sCompressed = gzencode($sHtml, 9);
file_put_contents("c.pt", $sCompressed);
[/phpcode]

然后的要点是 livid 那篇文章里提到的那样,在 httpd.conf 里

[quote]
AddEncoding x-gzip .pt
AddType text/html .pt
[/quote]

这样,就可以直接访问 c.pt 了,我随便找了个 20K 的文本文件压了一下,gzip 后 5K,就是说这个本应该 20K 的静态文件,在硬盘上的时候是 5K,在传输过程中也是 5K,在浏览器端解压成 20K,整个过程对用户来说和普通文件别无二致,只是在生成的时候多消耗轻微的 CPU。如此轻微的改动(多个 gzencode 及改两行 httpd.conf),就可以极大的节省带宽(节省普通 html 流量的大约 2/3)。

至于副作用,livid 说

[quote]
不过这样也会带来一个小问题,有的浏览器不支持 Content-Encoding 为 gzip,比如 Mac OS X 上的 Internet Explorer
[/quote]

不过个人认为这种情况可以少的忽略不记了