Web服务器访问加速–启用Gzip压缩
自从从YO2搬出来之后,就一直觉得博客非常慢,并且通过Google Analyst发现虽然流量在上升,但平均停留时间和跳出率指标均在下降,我想这应该就是网页打开过慢造成的,其实主要原因是服务器响应速度慢,其次就是 网页中脚本太多,文件太大。前者没有办法,因为服务器在美国,并且性能一般,而后者则可以自己调整,之前一直没有时间,今天就好好研究一下。

先考虑网页压缩,通常压缩格式为gzip。我博客主机为LAMP架构,即Linux+ Apache+ MySQL + PHP ,通过网上查询得知,在Apache中开启gzip压缩方法为:
在httpd.conf 或者博客根目录的.htaccess文件中加入如下规则(Apache服务器需要支持mod_deflate)
<ifmodule mod_deflate.c>
AddOutputFilter DEFLATE html xml php js css
</ifmodule>
或者
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/xml application/x-httpd-php application/x-javascript text/css
</ifmodule>
但 是经过我查看,这样写并不凑效,网页还是没有压缩,和客服联系发现主机的Apache根本就不支持mod_deflate,因此这种方法不成功。但是不要 紧,接着我发现,虽然Apache不支持mod_deflate,但是主机的php却支持zlib,也就是说支持gzip压缩,具体方法见下面描述:
对于静态网页(html,js,css),先设置URL Rewrite:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog #your blog, change when needed.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)(js|css|html|htm)$ /gzip.php?file=$1$2&type=$2 [L]
</IfModule>
可以通过URL Rewrite的方式请求这个gzip.php文件 (来自阅薇堂,该文件需要放在”/”目录),这样静态文件的gzip压缩就OK了。
对于由php动态输出的网页,常见的就是wp输出的页面,可以通过一个插件(gzippy
)开实现, 直接到 wp后台,在插件搜索里面输入“gzippy”然后安装即可。gzippy只有一句话:
<?php
function gzippy() {
ob_start(‘ob_gzhandler’);
}
if(!stristr($_SERVER['REQUEST_URI'], ‘tinymce’) && !ini_get(‘zlib.output_compression’)) {
add_action(‘init’, ‘gzippy’);
}
?>
这样下来,网页基本上除了图片外,都是经过压缩过的了。接着将几个不经常用的外链js干掉,具体来说就是那个庞大的yahoo media player以及 语法高亮的highlight.js. 干掉两个脚本之后,大功告成,看看优化结果。

图1. 浏览器清空缓存后打开网页下载量

图2. 不压缩情况下网页打开时间(浏览区缓存已清空)
图3. gzip压缩情况下网页打开时间(浏览区缓存已清空)
数据都是经过多次反复测试得出的,基本上能说明问题,可以明显看出,gzip压缩后,访问速度加快了(这不包括服务器响应时间),主要是内嵌javascript经过压缩后省了不少流量。
PS:
1.如果Wordpress 启用了 wp-cache 插件,则需要禁用 gzip 压缩。
2. 网页压缩性能查询工具: Port80

相关日志
本文发表于星期六, 一月 30th, 2010 at 上午 2:13 文章归类于 互联网.
标签: Wordpress, 主机, 加速.
你可以去 留下评论, 或者
我的博客是WP的,安装并且激活了Gzip OUTPUT插件,但是不知道是什么原因,用Febird提供的Port80测试网站提示是没有压缩的……其他的网站有的提示有,有的提示没有……
我的博客搭在了Megabyet的主机上面,能帮我看看怎么实现Gzip压缩吗?
[回复]
febird 回复:
二月 28th, 2010 at 上午 5:29
后台把你的评论当垃圾评论了,不好意思,没有及时回复。
Gzip OUTPUT插件没有效果的话,那就用我上面提到的两个办法,要么通过Apache的mod_deflate模块在文件层就gzip压缩,要么在通过URL重写让php来帮你压缩。
[回复]