之前用的国内的空间,速度还算可以,所以也就没想着去优化wordpress的速度。最近搬到ixwebhosting,那速度果然是传说中的垃圾中的战斗机。虽然使用了wp supper cache插件,但速度依然奇慢。于是便想到可以通过启用Gzip压缩来减小文件的大小,来加快网页的浏览速度。经过一番折腾发现效果还是很明显的,用YSlow插件测试性能提高了2个档次。好方法不敢独享,特写出来和各位分享下。
1,请确认你的空间支持Gzip。
还好ixwebhosting是支持的,而且默认是启用的。你可以通过phpinfo.php查看你的空间是否支持Gzip compression。
2,打开Wordpress的Gzip功能,其实在Wordpress2.5以前默认是启用的,不过为什么这版本以后会关掉。不管它,我们把它打开。
打开你Wordpress根目录下的index.php(切记是根目录下的,不是theme目录),然后在
define(‘WP_USE_THEMES’, true);
后面加上
if(ereg(‘gzip’,$_SERVER[‘HTTP_ACCEPT_ENCODING’])){
if(substr($_SERVER[‘REQUEST_URI’],0,10)!=’/wp-content/uploads/’)//排除不需要Gzip压缩的目录,图片一般不推荐启用Gzip压缩
ob_start(‘ob_gzhandler’);
}
到这里你已经开启了Gzip功能,不过为了保险起见,还是检测去一下吧:http://tool.chinaz.com/Gzips/
通过这一步骤,网站的性能已经提高了一个档次,不过对于CSS和JS,默认是不进行压缩的,下一步我们就让它也对JS和CSS进行压缩
3,让JS和CSS支持Gzip压缩
搜索了一下,有很多方法可以实现,但都有一个严重的BUG,该死的IE6对Gzip的支持不是很好,如果对CSS、JS进行Gzip压缩,会使部分JS失效或者CSS无法加载,Dream试了下,只要一启用Gzip,Wordpress就处于裸奔状态,CSS完全失效,而且还一大堆JS错误。既然IE6不支持,那我们就绕过它(惹不起我还躲不起吗?)经过一下午的折腾,终于搞定了这问题。
1)在你网站的根目录下新建立一文件夹wp-cache,用来存放Gzip文件,请确保该文件夹权限为可读写。
2)在你网站的根目录下新建一名字为gzip.php的文件,代码如下。如果你懒得Copy代码,直接点击这里下载吧.
<?php
define(‘ABSPATH’, dirname(__FILE__).’/’);
$cache = true;//Gzip压缩开关
$cachedir = ‘wp-cache/’;//存放gz文件的目录,确保可写
$gzip = strstr($_SERVER[‘HTTP_ACCEPT_ENCODING’], ‘gzip’);
$deflate = strstr($_SERVER[‘HTTP_ACCEPT_ENCODING’], ‘deflate’);
$encoding = $gzip ? ‘gzip’ : ($deflate ? ‘deflate’ : ‘none’);
if(!isset($_SERVER[‘QUERY_STRING’]))
exit();
$key=array_shift(explode(‘?’, $_SERVER[‘QUERY_STRING’]));
$key=str_replace(‘../’,”,$key);
$filename=ABSPATH.$key;
$symbol=’^’;
$rel_path=str_replace(ABSPATH,”,dirname($filename));
$namespace=str_replace(‘/’,$symbol,$rel_path);
$cache_filename=ABSPATH.$cachedir.$namespace.$symbol.basename($filename).’.gz’;//生成gz文件路径
$type=”Content-type: text/html”; //默认的类型信息
$ext = array_pop(explode(‘.’, $filename));//根据后缀判断文件类型信息
switch ($ext)
{
case ‘css’:
$type=”Content-type: text/css”;
break;
case ‘js’:
$type=”Content-type: text/javascript”;
break;
default:
exit();
}
if($cache)
{
if(file_exists($cache_filename)){//假如存在gz文件
$mtime = filemtime($cache_filename);
$gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’;
if( (isset($_SERVER[‘HTTP_IF_MODIFIED_SINCE’]) && array_shift(explode(‘;’, $_SERVER[‘HTTP_IF_MODIFIED_SINCE’])) == $gmt_mtime))
{
// 浏览器cache中的文件修改日期是否一致,将返回304
header (“HTTP/1.1 304 Not Modified”);
header(“Expires: “);
header(“Cache-Control: “);
header(“Pragma: “);
header($type);
header(“Tips: Cache Not Modified (Gzip)”);
header (‘Content-Length: 0’);
}
else
{
//读取gz文件输出
$content = file_get_contents($cache_filename);
header(“Last-Modified:” . $gmt_mtime);
header(“Expires: “);
header(“Cache-Control: “);
header(“Pragma: “);
header($type);
header(“Tips: Normal Respond (Gzip)”);
header(“Content-Encoding: gzip”);
echo $content;
}
}
else if(file_exists($filename))
{ //没有对应的gz文件
$mtime = mktime();
$gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’;
$content = file_get_contents($filename);//读取文件
$content = gzencode($content, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE);//压缩文件内容
header(“Last-Modified:” . $gmt_mtime);
header(“Expires: “);
header(“Cache-Control: “);
header(“Pragma: “);
header($type);
header(“Tips: Build Gzip File (Gzip)”);
header (“Content-Encoding: ” . $encoding);
header (‘Content-Length: ‘ . strlen($content));
echo $content;
if ($fp = fopen($cache_filename, ‘w’))
{//写入gz文件,供下次使用
fwrite($fp, $content);
fclose($fp);
}
}
else
{
header(“HTTP/1.0 404 Not Found”);
}
}
else
{ //处理不使用Gzip模式下的输出。原理基本同上
if(file_exists($filename))
{
$mtime = filemtime($filename);
$gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’;
if( (isset($_SERVER[‘HTTP_IF_MODIFIED_SINCE’]) && array_shift(explode(‘;’, $_SERVER[‘HTTP_IF_MODIFIED_SINCE’])) == $gmt_mtime))
{
header (“HTTP/1.1 304 Not Modified”);
header(“Expires: “);
header(“Cache-Control: “);
header(“Pragma: “);
header($type);
header(“Tips: Cache Not Modified”);
header (‘Content-Length: 0’);
}
else
{
header(“Last-Modified:” . $gmt_mtime);
header(“Expires: “);
header(“Cache-Control: “);
header(“Pragma: “);
header($type);
header(“Tips: Normal Respond”);
$content = readfile($filename);
echo $content;
}
}
else
{
header(“HTTP/1.0 404 Not Found”);
}
}
?>
3)在你网站的根目录下的.htaccess中添加以下代码,如果.htaccess不存在则新建一个。
RewriteCond %{HTTP:User-Agent} !MSIE\ [5-6]
RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L]
<?php
define(‘ABSPATH’, dirname(__FILE__).’/’);
$cache = true;//Gzip压缩开关
$cachedir = ‘wp-cache/’;//存放gz文件的目录,确保可写
$gzip = strstr($_SERVER[‘HTTP_ACCEPT_ENCODING’], ‘gzip’);
$deflate = strstr($_SERVER[‘HTTP_ACCEPT_ENCODING’], ‘deflate’);
$encoding = $gzip ? ‘gzip’ : ($deflate ? ‘deflate’ : ‘none’);
if(!isset($_SERVER[‘QUERY_STRING’]))
exit();
$key=array_shift(explode(‘?’, $_SERVER[‘QUERY_STRING’]));
$key=str_replace(‘../’,”,$key);
$filename=ABSPATH.$key;
$symbol=’^’;
$rel_path=str_replace(ABSPATH,”,dirname($filename));
$namespace=str_replace(‘/’,$symbol,$rel_path);
$cache_filename=ABSPATH.$cachedir.$namespace.$symbol.basename($filename).’.gz’;//生成gz文件路径
$type=”Content-type: text/html”; //默认的类型信息
$ext = array_pop(explode(‘.’, $filename));//根据后缀判断文件类型信息
switch ($ext)
{
case ‘css’:
$type=”Content-type: text/css”;
break;
case ‘js’:
$type=”Content-type: text/javascript”;
break;
default:
exit();
}
if($cache)
{
if(file_exists($cache_filename)){//假如存在gz文件
$mtime = filemtime($cache_filename);
$gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’;
if( (isset($_SERVER[‘HTTP_IF_MODIFIED_SINCE’]) && array_shift(explode(‘;’, $_SERVER[‘HTTP_IF_MODIFIED_SINCE’])) == $gmt_mtime))
{
// 浏览器cache中的文件修改日期是否一致,将返回304
header (“HTTP/1.1 304 Not Modified”);
header(“Expires: “);
header(“Cache-Control: “);
header(“Pragma: “);
header($type);
header(“Tips: Cache Not Modified (Gzip)”);
header (‘Content-Length: 0’);
}
else
{
//读取gz文件输出
$content = file_get_contents($cache_filename);
header(“Last-Modified:” . $gmt_mtime);
header(“Expires: “);
header(“Cache-Control: “);
header(“Pragma: “);
header($type);
header(“Tips: Normal Respond (Gzip)”);
header(“Content-Encoding: gzip”);
echo $content;
}
}
else if(file_exists($filename))
{ //没有对应的gz文件
$mtime = mktime();
$gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’;
$content = file_get_contents($filename);//读取文件
$content = gzencode($content, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE);//压缩文件内容
header(“Last-Modified:” . $gmt_mtime);
header(“Expires: “);
header(“Cache-Control: “);
header(“Pragma: “);
header($type);
header(“Tips: Build Gzip File (Gzip)”);
header (“Content-Encoding: ” . $encoding);
header (‘Content-Length: ‘ . strlen($content));
echo $content;
if ($fp = fopen($cache_filename, ‘w’))
{//写入gz文件,供下次使用
fwrite($fp, $content);
fclose($fp);
}
}
else
{
header(“HTTP/1.0 404 Not Found”);
}
}
else
{ //处理不使用Gzip模式下的输出。原理基本同上
if(file_exists($filename))
{
$mtime = filemtime($filename);
$gmt_mtime = gmdate(‘D, d M Y H:i:s’, $mtime) . ‘ GMT’;
if( (isset($_SERVER[‘HTTP_IF_MODIFIED_SINCE’]) && array_shift(explode(‘;’, $_SERVER[‘HTTP_IF_MODIFIED_SINCE’])) == $gmt_mtime))
{
header (“HTTP/1.1 304 Not Modified”);
header(“Expires: “);
header(“Cache-Control: “);
header(“Pragma: “);
header($type);
header(“Tips: Cache Not Modified”);
header (‘Content-Length: 0’);
}
else
{
header(“Last-Modified:” . $gmt_mtime);
header(“Expires: “);
header(“Cache-Control: “);
header(“Pragma: “);
header($type);
header(“Tips: Normal Respond”);
$content = readfile($filename);
echo $content;
}
}
else
{
header(“HTTP/1.0 404 Not Found”);
}
}
?>
RewriteCond %{HTTP:User-Agent} !MSIE\ [5-6]
RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L]
这段代码的意思是判断当前浏览器是否为IE5-6(虽然现在很少人用IE5,不过为保险起见还是加上吧),如果不是则对CSS/JS启用Gzip压缩。
至此,任务已完成。不出意外的话,经过这么一番折腾,你的Wordpress性能应该能提升2个档次。什么,你知道用什么来测试,Firefox插件YSlow。
我用的也是ix的主机,通过此方法,我的网站速度确实提高不少,谢谢。
打算试试看 希望能够提速 而且更大的原因是希望能够节省空间流量
太强了,非常好
好难啊 ,看不懂~呜呜
在万戈的网站见过这篇差不多的文章
正如我文章中据说,介绍Wordpress Gzip的文章还多,但都没有解决IE6下启用Gip的BUG,这才是关键。呵 呵!
这个有用,回头看看
我启用了,但好象速度并不明显。
另外有些空间不支持的GZIP。
我用插件开启的,很好很强大。
回去研究一下~
回头试试看。没关注过WP 的gzip
刚刚查了一下,我的居然默认开启了,压缩率 76%。
可能你用了插件吧
2.5以后的版本默认都是关闭的。
我用BLUEHOST,回家试试gzip,早就听说了,但一直不会用。
第一个办法以前就开始用了
第二个才晓得还可以这样的
还有一种方法在 .htaccess文件下添加
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
申请友链
地址:http://blog.king51.com
贵站链接已经做好
这方法我试过,出现500错误.
另友情链接已添加至内页.
回头尝试下
这篇教程非常有用,目前只试了第一个,第二个有空再来,看起来比较麻烦。
也不是很麻烦的,也就2个步骤,新增加gzip.php文件,然后在htaccess中新增加2行代码而已。
确实是不错~~~~~~~