浅谈网站的gzip输出优化 Unknown 2009/08/08

| |

gzip是一个网页领域的压缩标准,GNU Zip格式。它通过向客户端浏览器发送gzip格式的压缩格式(通常能达到50%的压缩率以上),然后客户端浏览器对接收到的压缩格式进行解压缩,以达到减少网页访问打开时间,优化网站性能的目的。

gzip压缩是很多服务器软件,如Apache,nginx,IIS等的标准配置。gzip更是绝大多数客户端浏览器支持的基本功能。

开启gzip功能,会占用一定服务器的CPU。同时gzip的对象是一些文本格式的文件,如html/htm/css/js等。大家用过WinZip或WinRAR的话,对一个Word文档压缩不了多少,但对一些文本文件的压缩率应该很吃惊吧(一般能达到30%左右)?是的,gzip优化网站就是这个原理。

今天我也在研究gzip,我的博客一些PHP输出页面都是自动带gzip输出的。但有一些Javascript及CSS,却没有打开这个功能。而往往这些Javascript文件挺大的(尤其是一些网站使用了JQuery啊Ajax之类的套件),如果能用gzip优化的话,应该效果挺好的。gzip对图像啊,MP3等效果不大,几乎没有。

具体检测你的网站上哪些页面已经采用了gzip与否,可以使用这个页面:http://www.usemm.com/tool/gzip/index.php

检测的结果蛮令我吃惊的,我发现:

1、我的Bo-blog系统页面及一些自建的HTML,如IpodScenenary等,均是已经自动gzip发送的。即我是不需要做什么优化的。
2、几乎所有的Javascript及CSS文件则显示非gzip压缩发送。为什么html页面会gzip发送,而javascript则不会?我想这可能与服务器配置有关。

所以,我的gzip优化对象是这部分.js及.css文件,尤其是文件较大的那几个。

我先写了一个gzip功能的网页,用以支持gzip压缩发送。

gzip_output

简要解释一下这个gzip.php的功能。接口为?url=xxxx。先检测服务器是否支持gzip输出,如果失败,显示“gzip服务器端被禁用了”出错信息。如果服务器支持gzip输出,检查?url=xxxx接入的文件,是否是正常的合法文件(用is_file()函数),如果不是,显示invalid URI(无效的路径)。如果有效,继续检查扩展名,如果不是.html/.htm/.css/.js的话,比如是个php文件,我当然不能允许gzip.php输出php文件的原代码,此时会报错:forbidden URI(禁止访问的URI)。如果是.html/.htm/.css/.js的话,接着检查浏览器是否接受gzip编码的内容,如果接受,则开启ob缓冲器(output buffer),输出?url=xxx所指向的文件,输出。如果不接受gzip编码,就不开启ob缓冲器,直接输出文件。

这里似乎有个问题,MIME-Type的问题。网页是text/html,CSS是text/css,Javascript则是Application/x-Javascript。Firefox老是报告我的gzip网页输出的是text/html,并不是text/css,并拒绝载入css样式表。但我调试了好久,总弄不好,先不管了。

2009-8-9 15:00
这个问题后来我解决了。可能当时的原因是Header发送的content-type还带了charset: utf-8。后来我取消了这部分,只显示content-type: text/css,就可以了。现在我的css也是经常gzip压缩发送的。另,javascript的mime-type我还是用text/javascript,而不是application/x-javascript。现在的代码见上面的图,图我已经更新过了。

下一步就是把网页中的<script src='/randMotto.js'></script>改为<script src='/gzip.php?url=/randMotto.js'></script>。这样,间接实现了gzip输出文本文件内容的功能。有兴趣的话,你可以用上面的网址检测一下两者的区别,前者是deflate,后者是gzip,压缩率为53%。

我在网上看到另一种方法,并不是手工一个一个改Javascript的SRC,而是通过在.htaccess文件中设置URLRewrite,对满足*.js的文件进行转向。我承认这种方法比较好,比较便于管理。不过我还不知道是否能应用在我的服务器上。

ps. 虽然gzip传输理论上要比默认的快,但实际上gzip输出的效果并不明显,主要是原来的网页也打开起来很快的。。。一定要找个差一点的网络环境才能测试。这里权当是技术问题研究了。gzip还能用来生成静态页面呢。具体参见这个网页,讲得比较详细: http://www.phpe.net/articles/123.shtml

最后,补充一句:gzip能压缩内容,换句话说,它能帮你节约了流量。而实际上流量就是MONEY或限制。

请给这篇日志评个分吧~!

本文评分: 4.5/10 (25 votes)    提示:您还未对本文评分,您可以进行评分并发表您的意见!

加入收藏!

Tags: , , ,
ZNZ Email Homepage IP
2009/08/10 04:11
节不节约的那点流量无所谓
我需要的是极速打开网页
spyrise 回复于 2009/08/10 09:51
gzip会耗服务器cpu,同时对宽带用户来说,没啥特别明显的感觉。网速较差的人可能会有比较好的受益。
分页: 1/1 第一页 1 最后页
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [注册]