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 文章归类于 互联网. 标签: , , .
你可以去 留下评论, 或者

2 条评论

  1. 我的博客是WP的,安装并且激活了Gzip OUTPUT插件,但是不知道是什么原因,用Febird提供的Port80测试网站提示是没有压缩的……其他的网站有的提示有,有的提示没有……
    我的博客搭在了Megabyet的主机上面,能帮我看看怎么实现Gzip压缩吗?

    [回复]

    febird 回复:

    后台把你的评论当垃圾评论了,不好意思,没有及时回复。
    Gzip OUTPUT插件没有效果的话,那就用我上面提到的两个办法,要么通过Apache的mod_deflate模块在文件层就gzip压缩,要么在通过URL重写让php来帮你压缩。

    [回复]

我有话说

没有自己的个性头像?去搞一个吧,很简单的,只要去Gravtar登记一下就OK啦,绑定Email后就可以在全球使用的。

标注有 黑体 的域是必填的. 你的电子邮件地址是 永远 不会公开或者转交给第三方.

下面的HTML标记可用:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
URIs 必须书写完整 (例如: http://www.febird.net) 并且所有的标签都应该正确关闭.

换行符与段落标记将自动产生.

大家要注意了,XX言论 可能 会被和谐哦.

  1. 我的网络


  2. 标签云

  3. 推荐服务

  4. 分类目录


  5. 最近文章

    1. 2011年度小结
    2. 美国主机与翻墙
    3. Archos101平板安装openAOS系统
    4. 折腾能力下降
    5. 新浪微博与腾讯QQ正面竞争已经展开
    6. Google Talk 和 Google Voice 的终极整合
    7. “无法访问Windows Installer服务”解决方法
    8. 跨平台的移动应用开发框架-PhoneGap
    9. 七月
    10. 在电脑上K歌的设置
    11. 中国通货膨胀的原因
    12. 关于家族字辈
    13. 15款免费云存储服务
    14. 基于PHP的开源在线OA软件 Feng Office
    15. 在WordPress中展示Facebook相册
    16. MusicBrainz Picard–MP3自动标签匹配工具
    17. 荧光灯为啥不能直接装在普通调光台灯上
    18. 打电话时”已关机”和“无法接通”的区别
    19. Ubuntu下使用WindowsMediaCenter遥控器控制XBMC
    20. 非常酷的开源Media Center-XBMC
  6. 最近评论

    1. ninee's avatarninee
      不错,有收获,有计划!
    2. febird's avatarfebird
      你说的是 Virtual-WiFi ? 只要是通过Windows的“共享网络连接"功能的,作为网关的那块网卡就支持NAT功能,也就起到了路由器的作用。 至于说一块网卡怎么能生成两个接口,那是网卡的一种模式,可以理解为AP-STA模式。
    3. jk's avatarjk
      问一下啊。。。W7下系统就能自动有一个虚拟网卡。通过它可以共享网络。那么这个虚拟网卡和物理网卡是怎么连的?我觉得是NAT吧。问一下。还有我G+上加你了。
    4. febird's avatarfebird
      哥的地盘,要开始实名制了。
    5. 就不告诉你's avatar就不告诉你
      公子啊,第5条是亮点啊~
    6. 龙龙Fred's avatar龙龙Fred
      那我一定要试一试
    7. NoAnyLove's avatarNoAnyLove
      对,GoAgnet是个不错的解决方案,不仅免费,而且速度也快,基本上可以达到你的带宽的全速(但是好像不能超过500 KB/s ,话说,国内个人用的带宽还很少有能达到这个速度的),比许多收费的SSH和VPN还要快。用于看Youtube绝对死最好的选择,访问一些美国网站也不是问题
    8. a nerd's avatara nerd
      GoAgent不就解决了