Web服务器内容的压缩输出

授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/299)的形式标明文章原始出处和作者信息及本声明。

还在使用工具压缩js和css文件么?已经有些落伍啦,其实web服务器本身就具备压缩功能,可以把客户端所需要的内容压缩后再传输。当然这需要客户端浏览器支持压缩(通常是gzip方式),不过现在的主流浏览器比如ie、firefox、opera、safari都是支持滴。

首先可以用Real-Time Compression Check检查一下你现有的网站是否启用了压缩输出,如果没有,而且你使用的是iis系列web服务器的话,可以购买商业软件比如ZipEnable来实现;如果使用的是apache服务器,那你有福了,使用mod_deflate就可以了。

mod_deflate的前身是mod_gunzip和mod_gzip,他们大多用于Apache 1.3分支,现在的Apache 2.x系列中,就被mod_deflate替代了,并且功能更加丰富。mod_gunzip和mod_gzip的区别在于:

mod_gunzip需要服务器上的文件本身就是压缩存储的,如果浏览器不支持压缩的话,再由web服务器解压后传输给客户端,否则直接读取压缩文件传给客户端。这样作的好处就是不占用cpu,并且大多数浏览器支持压缩,需要web服务器解压的不大。不过,碰到不支持压缩的机器人的话可就不好半喽。另外现在网站的内容大多是由程序动态生成的,在这种情况下mod_gunzip就没有用武之地了。

mod_gzip则不需要文件预先压缩存储,而是在浏览器支持压缩的情况下,把数据压缩之后再传给客户端。这样会牺牲一些cpu代价,但是适用于网站内容由程序动态生成的情况,并且gzip的速度也是非常得快,每次web请求的数据量也都不大,所以实际的cpu占用并不会太多。并且如果文件本身就是压缩了的,比如index.html.gz,那么这些文件会被直接输出,不用再压缩了(这样并不代表有了index.html.gz,就能替代index.html作为目录索引页)。所以mod_gzip实际上覆盖和超越了mod_gunzip的功能。

mod_deflate的启用在ubuntu中很简单,“a2enmod deflate”就可以了,其他系统可以在httpd.conf中添加:

LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so

mod_deflate还需要配置一下,比如在httpd.conf中:

<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php application/x-javascript text/css
</ifmodule>

指定对html、txt、xml、php、js、css等mime类型的文件进行压缩,application/x-httpd-php和application/x-javascript是我加上的,不知道能否起作用。也可以按照文件扩展名或者浏览器类型进行压缩,还有更复杂的配置,可以查询官方的手册

参考:
Compressed delivery
*.gz files shouldn’t get “Content-Encoding: gzip” header
How To Save Traffic With Apache2’s mod_deflate
Apache Module mod_deflate

Update @ 2008-03-31

今天在apache 2.2.4下看到还需要增加以下辅助配置:

AddEncoding x-gzip .gz
AddType text/html .gz

主要是让apache能够正确设置和处理.gz文件,至于MultiViews选项我看设不设没什么影响,参考:The nGzip File Compressor

Tags: , ,

Related posts

4 Responses to “Web服务器内容的压缩输出”

  1. 炎藤 Says:

    请教一下,如果平常的“用工具”压缩Js和CSS是不是修改其中的代码呢?
    而这里的mod_gzip/mod_gunzip大概就是和winrar类似的效果吧?

    请教中…
    lwjct@hotmail.com

    [Reply]

  2. Fwolf Says:

    回楼上,这里我说的一些css和js压缩工具
    多半是使用去除css和js文件当中的空格、TAB等方式来压缩的
    即对机器阅读来讲没有改变,只是把方便人阅读的无用字符去掉了

    关于第二个winrar的问题,我想问你如果把一个html文件压缩成.rar文件放在web目录下
    用户访问的时候会怎样呢?
    而如果启用了mod_gzip或者mod_deflate之后,用户访问会看到被自动解开的html原文
    而解压工作是由用户的浏览器来作的。

    [Reply]

  3. 清风 Says:

    能告诉wordpress的.htaccess怎么写吗?谢谢了!

    [Reply]

  4. Fwolf Says:

    To: 清风
    我一直使用从1.0延续下来的旧方法,自己写了个.htaccess,你可以参考我以前写的文章:
    http://www.fwolf.com/blog/post/87
    不过现在wp自带的permlink好像也很好用了
    似乎还有相关的插件呢

    还可以参考一下这里:
    http://www.chedong.com/blog/archives/001079.html
    不过也是比较旧的了

    [Reply]

Leave a Reply

您的留言将被缓存和审阅,所以不会立即出现在这里,请别着急,着急的话可以给我发邮件 :-)
支持Markdown Extra语法,参见: [甲] [1] [2]