首页 > 技术 > WordPress提速之GZip压缩

WordPress提速之GZip压缩

2009年10月5日 丕子 发表评论 阅读评论 22 阅读

wordpress什么是 Gzip 压缩,为什么要用 Gzip 压缩

说白了就是一种压缩的技术,它将浏览器请求的文件在服务器端进行压缩,然后将文件以压缩的形式传递给浏览器,然后在浏览器端进行解压缩,还原后进行解析。而目前 99% 的浏览器都支持 Gzip ,包括 IE 4+, Netscape 4+, Opera 5+ 和所有版本的 Safari 和 Firefox ,所以大家可以放心使用。

在这里我们的压缩对象是所有的 html、JS、和 CSS 。而他的压缩效率惊人,能减小 60% 到70%。像我的博客一个 10K 的 JS 文件,用 Gzip 压缩后浏览器接收的只有 3K 大小,16K 的 CSS 文件也被压缩到了 5K,很强大吧!

怎么知道我的页面是否 Gzip 压缩过了

Gzip 的方法有很多种,而有很多的服务器是默认开启 Gzip 压缩的,不过据我所知,这种服务器少之又少。怎么确定自己的网页是否被 Gzip 呢!!这种测试的网站网上也很多,不过一般只能测试 html,这里推荐给大家一个测试的网站:Websiteoptimization,输入网址后,输入验证码,就会给出你的 Web Page Speed Report.

gzip

貌似很多的“童鞋”看错了,现在补图上来!!其中在下面的 Page Objects 中,会给出所有所加载的文件的信息。在最后一栏的信息中,如果显示:Congratulations! This file was compressed. 说明是被压缩过的,如果是:Up to **** bytes could have been saved through compression,显然是还没被压缩的。

启用 Gzip 的几种方法

是的,有几种方法,是针对不同的情况的。

1、最好的情况是你的主机采用的是 Apache 2,并安装启用了mod_deflate 模块。这样就很简单了,只需要在 .htaccess 文件中加入以下代码可以压缩 HTML, PHP, JS, CSS, XML 后缀的文件。

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

不过一般的主机都没有这个模块,如果你是独立主机可以自行配置。至于如何检测自己的主机是否有安装这个模块,我还真没找到办法,望高手指点。如果大家有兴趣,可能将上面的代码加好,看是否 Gzip 来试一下!以上方法来自:我爱水煮鱼

2、用 PHP 来压缩

此方法也需要 PHP 模块 zlib 的支持,不过这是一个基本的模块,一般都开启了!!所以我们主要讲下这部分。

用 PHP 压缩动态页面

我们先来看所谓的 html 的压缩,其实也就是由 PHP 动态生成的 html 。这样的方法有很多,我用的是 shawn 的方法 ,还有 几种方法 供参考。

用 PHP 压缩 JS 和CSS

关于 JS 和 CSS 的压缩也有几种方法,目前比较多的是像 K2 学习,将 JS 和 CSS 改为 .php 的方法。这个前辈已经介绍过了,请移步:简述对WP博客样式表和JS脚本的压缩

这种方法的缺点是要修改每个 JS 和 CSS 文件,有点不太方便。对于将所有插件中的 JS 和CSS 都合并的博客来说还算容易,但没有合并的来说无疑是一项巨大的工程,而且插件更新也是件麻烦的事。另外看着好好的 CSS 文件变成了 PHP ,看着挺怪的,呵呵!!好处是有好的适应性,因为这 K2 用的方法!

第二种方法是老N提供的方法加速blog,压缩js,css,减省带宽 ,这种方法应该说比较简单,而且默认对所有的 JS 和 CSS 生效。原理就是把 JS 和 CSS 利用 .htaccess 交给一个 PHP 文件来处理进行压缩。

老N那的代码貌似复制出来有些问题,我再贴一下,呵呵:

1、创建 gzip.php 文件并上传到博客根目录,代码如下:

下载: gzip.php<?php
$allowed = array(
css => text/css,
js => text/javascript,
html => text/html,
htm => text/html,
);
$file = isset($_GET['url']) ? $_GET['url'] : null;
$extension = explode(., $file);
$extension = array_pop($extension);
if(isset($allowed[$extension]))
{
$pos = strpos($file, ..);
if ($pos === false && is_file($file))
{
@
ob_start (ob_gzhandler);
header(Content-type: {$allowed[$extension]}; charset: UTF-8);
readfile($file);
} else {
header(HTTP/1.1 404 Not Found);
}
}
?>2、更改.htaccess文件,在.htaccess中添加:

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} ^.*\.(css|js|html|htm)$
RewriteRule ^(.*)$ gzip.php?url=$1 [QSA,L]就 OK 了~,的确很简单

但上面两种方法还有一个问题,就是会吃服务器的资源,占用一定的 CPU 和内存,因为每次访问页面都要执行一下。但具体吃到什么程度,我就不清楚了,据说在服务器资源紧张的情况下压缩的效率会比较低,不过我想一般大型的主机提供商的主机还是不会有什么问题的。

第三种我们来看 辐射鱼提供的方法

1. 下载 Gzip.php 文件并上传到你的Wordpress安装目录
2. 在你的 Wordpress 根目录建立 wp-cache 文件夹并确保其可写入
3. 在.htaccess里面加上

RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L]即可

也非常的简单,而且此种方法的优点是:自动读取并 gzip 压缩 css 和 js,访问时直接调用生成的 .gz 文件,节约带宽也不占用服务器资源,但不适用空间下安装了多个 Wordpress 的博友,可能导致二级目录下的某些 WordPress 无法加载 CSS 样式。这些都是辐射鱼的原话,呵呵!另外就是当 CSS 和 JS 有更新时要手动清除缓存才行。符合条件的同志推荐用这种方法!!

———————————————————–

WordPress 2.5 以后就关闭了 GZip 功能。可以使用以下方法来开启:
方法1:

在根目录 index.php 中找到:
define(’WP_USE_THEMES’, true);
在后面加上:
ob_start(’ob_gzhandler’);
就OK了。

也可以加一点条件判断:
if(ereg(’gzip’,$_SERVER['HTTP_ACCEPT_ENCODING'])){ //判断浏览器是否支持Gizp
if(substr($_SERVER['REQUEST_URI'],0,10)!=’/wp-content/uploads/’) //排除不需要Gzip压缩的目录
ob_start(’ob_gzhandler’); //打开Gzip压缩
}

方法2:

如果服务器支持.htaccess文件,那么在wordpress根目录的.htaccess增加以下代码,如果没有.htaccess则新建后增加代码。增加完成后上传到wordpress根目录后即可。
php_value output_handler ob_gzhandler

方法3:

通过php.ini 启用Gzip
如果服务器支持php.ini重定义的话,可以在php.ini中增加以下代码来开启gzip。
zlib.output_compression_level = < 任何1—9的值,1的压缩比率最低, 建议取 6>

需要注意的是如果在.htaccess文件中禁止了gzip功能的话,那在php.ini文件中开启后需在.htaccess文件中开启,否则无效。
开启wordpress的gzip功能后,服务器将在页面传输前将页面压缩后传送,可以有效减少服务器的带宽使用,也可以加速页面下载。
这个网站可以查看页面是否启用 GZip,以及启用后页面的压缩率。

11
Digg
分享到: 分享到人人网
分类: 技术 标签:
  1. 2009年10月5日12:15 | #1

    我用wp-super-cache,不过如果服务器前端启用缓存的话,缓存类的设置都没有作用

  2. 2009年10月5日16:08 | #2

    考虑一下启用静态化插件Wp-super-cache, 但是安装好插件后发现不知道怎么设置了,后来找了一下相关的资料终于把需要配置的都弄好了.而网上仍然有好多朋友不知道该插件的配置,为了方便大家,现在把我安装配置这个插件的方法详细说一下. 谈不上是方法.

    首先下载插件 地址: Wp-super-cache 最新版的是0.91的吧,如果不是的话后台会提示你升级的.

    然后安装.当然您可以选择博客插件栏目里的安装插件在线安装,或者解压后通过FTP工具上传到服务器里的plungins目录,大家应该都知道吧。最后在启用就可以去Wp-super-cache的控制面板里进行相关设置了。

    最上边有一个警告(Warning)Warning! /home/content/f/t/p/ftp198798/html/blog/wp-content is writeable! 到wp管理后台插件页面激活插件,激活后插件后,它会出现红色警告,这时需要您在wp-config.php文件里加入如下代码:define(’WP_CACHE’, true);

    第一项:Wp-super-cache Status 这个一般选择

    ON WP Cache and Super Cache enabled 但是如果您选择了后边的 Mobile device support. Plugin will enter “Half-On” mode.的话它会跳到half on 至于选择half on 和on的区别目前我也没有搞懂。不过根据提说说half on 的话就是支持移动设备访问了那就说选择half on 和on 应该都没事。

    第二项 Cache rebuild. Serve a supercache file to anonymous users while a new file is being generated. Recommended for very busy websites with lots of comments. Makes “directly cached pages” and “Lockdown mode” obsolete. 这里我勾选了这个,翻译出来是缓存重建,当缓存文件存在用户请求时发送缓存文件给匿名访问用户.推荐留言评论很多的服务器启用这个选项。

    第三项: Update Status 只要你设置好第四项的内容,这个是不用你干预的,因为这个是用来手动清除您的服务器上的缓存文件的,当你点击后边的Delete cache时就会清空缓存文件。当然如果您有更新的东西需要及时浏览这个手动清除缓存还是很必要的。

    第四项:Expiry Time & Garbage Collection 这个据目前重量级的WP人物说最好是调成一天也就是86400。设置好后点击Change Experation就好了.意思就是说每隔多长时间清除一次缓存文件。当然这个过程是自动的,并不需要你手动干预!

    第五项: Accepted Filenames & Rejected URIs 这个允许你自己设置那些文件允许设置为缓存,那些文件禁止设置为缓存文件,我的我从来都没有动过. 就是说这儿一般是不需要配置的 .

    第六项: 后边的就不说杀了,据我所知后边的都不需要管,当然如果你需要还原初始状态.可以点击一下 Restore Default Configuration. 完了就是你刚刚安装好改插件的状态了.

    最后 打开设置——固定链接 里边选择或者自定义您需要的链接形式保存即可.本站的语法是年月日+日志名字.为了美观便捷,建议大家发表日志的时候简要的设置一下标题下边的链接.最好是英文的.附本站永久链接的语法(直接复制到自定义那一栏保存即可): /%year%/%monthnum%/%day%/%postname%/index.html

    这儿还有一个更全的介绍: 大家可以参考一下 他的设置也很明了,建议看看

  3. 2009年10月5日17:44 | #3

    @mypcfix

    我用了 Wp-super-cache , 你感觉我的站速度改善了么?

  4. 2009年10月6日17:11 | #4

    你好,我的友链已经比较多了,9.28后已经不再添加新的链接了,不好意思啊。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.
:-P :cry: :wink: 8-O :evil: :?: :idea: :oops: :twisted: :mrgreen: :roll: more »
 

You need to log in to vote

The blog owner requires users to be logged in to be able to vote for this post.

Alternatively, if you do not have an account yet you can create one here.

Powered by Vote It Up