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中添加:
mod_deflate还需要配置一下,比如在httpd.conf中:
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
![[Bloglines]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/bloglines.png)
![[del.icio.us]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/delicious.png)
![[Digg]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/digg.png)
![[diigo]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/diigo.png)
![[Facebook]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/facebook.png)
![[Google]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/google.png)
![[MySpace]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/myspace.png)
![[Reddit]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/reddit.png)
![[Slashdot]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/slashdot.png)
![[Email]](http://www.fwolf.com/blog/wp-content/plugins/bookmarkify/email.png)
March 15th, 2007 at 12:16:04
请教一下,如果平常的“用工具”压缩Js和CSS是不是修改其中的代码呢?
而这里的mod_gzip/mod_gunzip大概就是和winrar类似的效果吧?
请教中…
lwjct@hotmail.com
[Reply]
March 15th, 2007 at 13:07:47
回楼上,这里我说的一些css和js压缩工具
多半是使用去除css和js文件当中的空格、TAB等方式来压缩的
即对机器阅读来讲没有改变,只是把方便人阅读的无用字符去掉了
关于第二个winrar的问题,我想问你如果把一个html文件压缩成.rar文件放在web目录下
用户访问的时候会怎样呢?
而如果启用了mod_gzip或者mod_deflate之后,用户访问会看到被自动解开的html原文
而解压工作是由用户的浏览器来作的。
[Reply]
March 15th, 2007 at 13:29:18
能告诉wordpress的.htaccess怎么写吗?谢谢了!
[Reply]
March 16th, 2007 at 0:46:54
To: 清风
我一直使用从1.0延续下来的旧方法,自己写了个.htaccess,你可以参考我以前写的文章:
http://www.fwolf.com/blog/post/87
不过现在wp自带的permlink好像也很好用了
似乎还有相关的插件呢
还可以参考一下这里:
http://www.chedong.com/blog/archives/001079.html
不过也是比较旧的了
[Reply]