wordpress开启Gzip功能进行优化加速
1,请确认你的空间支持Gzip
你可以通过phpinfo.php查看你的空间是否支持Gzip compression。
2,打开Wordpress的Gzip功能
其实在Wordpress2.5以前默认是启用的,不过为什么这版本以后会关掉。不管它,我们把它打开。打开你Wordpress根目录下的index.php(切记是根目录下的,不是theme目录),然后在
1define('WP_USE_THEMES', true);
2后面加上
3if(ereg('gzip',$_SERVER['HTTP_ACCEPT_ENCODING'])){
4if(substr($_SERVER['REQUEST_URI'],0,10)!='/wp-content/uploads/')//排除不需要Gzip压缩的目录,图片一般不推荐启用Gzip压缩
5ob_start('ob_gzhandler');
6}
到这里你已经开启了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代码,直接点击这里下载吧.
1<?php
2define('ABSPATH', dirname(__FILE__).'/');
3$cache = true;//Gzip压缩开关
4$cachedir = 'wp-cache/';//存放gz文件的目录,确保可写
5$gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip');
6$deflate = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate');
7$encoding = $gzip ? 'gzip' : ($deflate ? 'deflate' : 'none');
8if(!isset($_SERVER['QUERY_STRING']))
9exit();
10$key=array_shift(explode('?', $_SERVER['QUERY_STRING']));
11$key=str_replace('../','',$key);
12$filename=ABSPATH.$key;
13$symbol='^';
14$rel_path=str_replace(ABSPATH,'',dirname($filename));
15$namespace=str_replace('/',$symbol,$rel_path);
16$cache_filename=ABSPATH.$cachedir.$namespace.$symbol.basename($filename).'.gz';//生成gz文件路径
17$type="Content-type: text/html"; //默认的类型信息
18$ext = array_pop(explode('.', $filename));//根据后缀判断文件类型信息
19switch ($ext)
20{
21case 'css':
22$type="Content-type: text/css";
23break;
24case 'js':
25$type="Content-type: text/javascript";
26break;
27default:
28exit();
29}
30if($cache)
31{
32if(file_exists($cache_filename)){//假如存在gz文件
33$mtime = filemtime($cache_filename);
34$gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
35if( (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && array_shift(explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) == $gmt_mtime))
36{
37// 浏览器cache中的文件修改日期是否一致,将返回304
38header ("HTTP/1.1 304 Not Modified");
39header("Expires: ");
40header("Cache-Control: ");
41header("Pragma: ");
42header($type);
43header("Tips: Cache Not Modified (Gzip)");
44header ('Content-Length: 0');
45}
46else
47{
48//读取gz文件输出
49$content = file_get_contents($cache_filename);
50header("Last-Modified:" . $gmt_mtime);
51header("Expires: ");
52header("Cache-Control: ");
53header("Pragma: ");
54header($type);
55header("Tips: Normal Respond (Gzip)");
56header("Content-Encoding: gzip");
57echo $content;
58}
59}
60else if(file_exists($filename))
61{ //没有对应的gz文件
62$mtime = mktime();
63$gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
64$content = file_get_contents($filename);//读取文件
65$content = gzencode($content, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE);//压缩文件内容
66header("Last-Modified:" . $gmt_mtime);
67header("Expires: ");
68header("Cache-Control: ");
69header("Pragma: ");
70header($type);
71header("Tips: Build Gzip File (Gzip)");
72header ("Content-Encoding: " . $encoding);
73header ('Content-Length: ' . strlen($content));
74echo $content;
75if ($fp = fopen($cache_filename, 'w'))
76{//写入gz文件,供下次使用
77fwrite($fp, $content);
78fclose($fp);
79}
80}
81else
82{
83header("HTTP/1.0 404 Not Found");
84}
85}
86else
87{ //处理不使用Gzip模式下的输出。原理基本同上
88if(file_exists($filename))
89{
90$mtime = filemtime($filename);
91$gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
92if( (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && array_shift(explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) == $gmt_mtime))
93{
94header ("HTTP/1.1 304 Not Modified");
95header("Expires: ");
96header("Cache-Control: ");
97header("Pragma: ");
98header($type);
99header("Tips: Cache Not Modified");
100header ('Content-Length: 0');
101}
102else
103{
104header("Last-Modified:" . $gmt_mtime);
105header("Expires: ");
106header("Cache-Control: ");
107header("Pragma: ");
108header($type);
109header("Tips: Normal Respond");
110$content = readfile($filename);
111echo $content;
112}
113}
114else
115{
116header("HTTP/1.0 404 Not Found");
117}
118}
119?>
3)在你网站的根目录下的.htaccess中添加以下代码,如果.htaccess不存在则新建一个。
1RewriteCond %{HTTP:User-Agent} !MSIE [5-6]
2RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L]
这段代码的意思是判断当前浏览器是否为IE5-6(虽然现在很少人用IE5,不过为保险起见还是加上吧),如果不是则对CSS/JS启用Gzip压缩。
至此,任务已完成。不出意外的话,经过这么一番折腾,你的Wordpress性能应该能提升2个档次。什么,你知道用什么来测试,Firefox插件YSlow。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/wordpress-gzip/716.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.