Total Pageviews

Monday 8 October 2012

让autoptimize给压缩的css/js文件添加Last-Modified信息

最近因为放了广告,又新加了个Jiathis的分享插件,wp blog的页面载入速度越来越慢,所以小研究下速度优化

用了Google的Page Speed和YSlow,都显示要把JS放到底部加载,之前用autoptimize压缩了js,的确是放底部加载的,但是这样会导致我归档页面的jQuery失效,不过想想无所谓了,那只是一个几乎没人看的页面

重新开启JS压缩后,又有个新的问题,检测到autoptimize压缩的3个php文件没有Last-Modified信息

看了文件header,里面有Expires,但是没有Last-Modified,而且Expires设置是最大值10年。。。
image

好吧,我自己觉得没必要那么久,最多30天够了,不过我这种不懂前端不懂设计的土鳖也是自己认为了

不过Last-Modified还是想加上的,但是给插件作者留言等新版那是极其不靠谱的做法,这插件也快一年没更新了,也没啥大问题,估计作者不大会更新了

用WP就要有折腾精神,自己看看代码吧,虽然不是很懂php,不过grep下相关名字,很快找到我要修改的地方

只需要修改两个文件,也获取只要一个,不过我两个都改了,万无一失,哈哈

修改/wp-content/cache/autoptimize/config/default.php   

header('Cache-Control: max-age=604800, public, must-revalidate');//max-age修改为7天
header('Expires: '.gmdate('D, d M Y H:i:s', time() + 604800).' GMT'); //过期时间修改为7天,不需要那么久
header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime(__FILE__)).' GMT'); //新增此行,获取文件最后修改时间

修改/wp-content/cache/autoptimize/config/delayed.php

header('Cache-Control: max-age=1209600, public, must-revalidate');
header('Expires: '.gmdate('D, d M Y H:i:s', time() + 604800).' GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime(__FILE__)).' GMT');

保存,清空缓存,重新用你的浏览器打开,建议用隐私模式,或者清除缓存后打开,查看autoptimize生成的压缩文件,是不是已经多了Last-Modified信息,并且过期时间也变7天了.
-----------------------------------------------------------------------------------------

wordpress使用autoptimize插件,开启YUI compression,压缩css/js


 今天在wordpress后台整理插件,因为之前安装了autoptimize,一款压缩js和css的插件

因为后台设置里有一个选项Use YUI compression? 之前一直没勾选,不知道开启后是不是效果更好呢?

所以准备看看这个YUI compression是何方神圣,选项后面有注释Read [autoptimize]/yui/README.txt for more information.

打开README查看,是如何开启这个功能的说明,如下:

HOW TO USE YUI COMPRESSION
To use YUI Compression for JavaScript and CSS code, you need:
1- java installed and working on the server
2- YUI Compressor .jar file on the same directory as this file, with
   "yuicompressor.jar" as name. You can get it here:
   http://yuilibrary.com/downloads/#yuicompressor
3- PHP's shell_exec function enabled.
4- Writing permissions on this directory

When all the requerimients are fullfilled, you will be able to enable
YUI compression on Autoptimize's config page.

首先要在服务器上安装java,到sun找到适合版本的jre下载到服务器,我下载的为jre-6u24-linux-i586.bin

然后安装到指定目录

mkdri /usr/local/java
mv jre-6u24-linux-i586.bin /usr/local/java
chmod +x jre-6u24-linux-i586.bin
./jre-6u24-linux-i586.bin
rm -fv jre-6u24-linux-i586.bin
ln -s /usr/local/java/jre1.6.0_24 /usr/lib/jre

这样就把jre解压安装到/usr/local/java/jre1.6.0_24下了

因为我的nginx使用www用户在运行,所以给www加入java环境变量

vi /home/www/.bashrc
export J2RE_HOME=/usr/lib/jre
export PATH=$J2RE_HOME/bin:$PATH

切换到www用户看看java命令是否已经可以运行

su www
java -version
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode, sharing)

www用户的java环境以及配置好了,下面是下载yui了,进入到wordpress的插件目录下

cd /your htdocs path/wp-content/plugins/autoptimize/yui
wget -c http://yuilibrary.com/downloads/yuicompressor/yuicompressor-2.4.2.zip
unzip yuicompressor-2.4.2.zip
cd yuicompressor-2.4.2/build
cp yuicompressor-2.4.2.jar ../../yuicompressor.jar
cd ../..
chown www.www yuicompressor.jar

到你的phpinfo页面看看shell_exec函数是否被禁用,这里需要这个函数,如果正常,那么配置就结束了.

你可以手工测试下,复制一个css文件到yui文件夹下,切换到www用户,试试能不能正常转换.

su www
java -jar yuicompressor.jar yourcss.css -o yourcss.mini.css  --charset utf-8 -v --type css
ll
-rw-r--r-- 1 www  www      532 10-10 14:33 README.txt
-rw-r--r-- 1 www  www    17646 04-10 14:56 yourcss.css
-rw-r--r-- 1 www  www    13651 04-10 14:57 yourcss.mini.css
drwxr-xr-x 6 www  www     4096 04-10 14:42 yuicompressor-2.4.2
-rw-r--r-- 1 www  www  1692827 04-07 04:27 yuicompressor-2.4.2.zip
-rw-r--r-- 1 www  www   851219 04-10 14:43 yuicompressor.jar

可以看到之前的yourcss.css大小为17646,压缩后的yourcss.mini.css为13651,不过我感觉没小多少,没达到我的期望啊,我希望小一半.

然后在后台打开Use YUI compression?选项即可,后来我看了下源码,autoptimizeYUI.php

if(file_exists('/usr/bin/java') && file_exists(WP_PLUGIN_DIR.'/autoptimize/yui/yuicompressor.jar'))
                        {
                                //And we have a dir in where to work
                                if(is_writable(WP_PLUGIN_DIR.'/autoptimize/yui/'))
                                {
                                        //Then we're available
                                        return true;
                                }
                        }
                }
                //We can't use YUI :(
                return false;
        }

也就是程序会去判断/usr/bin/java是否存在,不存在就不会使用YUI了,而是用minify.

而我上面安装jre时,没有把java放到这个目录下,也就是程序肯定找不到,就不会使用YUI了,那就为java在/usr/bin下创建个软链接就好:

ln -s /usr/loacl/java/jre1.6.0_24/bin/java /usr/bin/java

这样就搞定了,不过我自己还是有个疑问,因为自己也不懂css和js,开启压缩后,查看网页源码,css和js都压缩,但是我怎么判断是否是YUI压缩出来的,还是minify压缩出来的?
另外,其实我不知道到底开启没,因为我自己手工运行是可以了,网上好像也没教程说autoptimize的YUI开启方法,所以自己这么做了.