使用minify合并YUI请求

介绍

minify是一个基于php的开源项目,用它可以合并多个JS与CSS的请求。

下载与安装

下载链接:http://code.google.com/p/minify/

将下载下来的压缩包解压缩,将里面的min目录放到网站的根目录下。打开min目录修改里面的config.php文件,将$min_serveOptions[‘minApp’][‘maxFiles’] = 10;的值改大一些,这个参数表示一次请求最多可以合并多少个文件,因为YUI的细粒度很高,所以一次请求的模块文件很多,默认值10显然不够。同时将$min_cachePath = ‘/tmp’;这行的注释去掉,可以提升性能。

完成上面的步骤可以在浏览器测试一下,我机器的测试地址是http://localhost:8086/min/?f=/build/oop/oop.js,/build/event-custom/event-custom.js

注意服务器要开启mod_rewrite模块

改造YUI loader

因为YUI loader构造的请求地址是类似http://yui.yahooapis.com/combo?3.3.0/build/classnamemanager/classnamemanager-min.js&3.3.0/build/oop/oop-min.js&3.3.0/build/event-custom/event-custom-min.js&3.3.0/build/event/event-base-min.js&3.3.0/build/pluginhost/pluginhost-min.js&3.3.0/build/dom/dom-min.js&3.3.0/build/node/node-min.js&3.3.0/build/event/event-delegate-min.js&3.3.0/build/attribute/attribute-base-min.js&3.3.0/build/base/base-base-min.js&3.3.0/build/plugin/plugin-min.js&这样的,URL没有参数名,每个JS文件用”&”号分隔。而minify的地址格式是http://localhost:8086/min/?f=/build/oop/oop.js,/build/event-custom/event-custom.js,可以看出minify的请求地址用’f’当作参数名,每个JS地址用”,”号分隔。所以要对YUI loader进行一下改造,让它可以构造出符合minify格式的请求地址。

进入到YUI的build/loader文件夹,将loader.js备份一下,之后编辑loade.js,找到如下行:

url += frag;
if (i < (len - 1)) {
    url += '&';
}

替换成下面的代码

//fixed YUI 3.1.0 combo bug
//http://yuilibrary.com/projects/yui3/ticket/2528680
if(url.slice(-3) ==='.js' || url.slice(-4) === '.css'){
    //for K2
    //使用Minfy 取代 Combo Handler
    //url += '&';
    url += ',';
}

url += frag;

// there is a bug that combo?a.css&b.css&
/*
if (i < (len - 1)) {
    url += '&';
}
*/

在YUI使用minify

做完上面的工作之后,就可以在YUI中使用自己的combine服务了。在实例化YUI的时候加上如下的配置项:

YUI({
    combine: true,
    comboBase: '/min/?b=build&f=',
    root: ''
}).use('placeholder', function(Y) {
	Y.all('.test').plug(Y.Plugin.Placeholder);
});

使用minify合并YUI请求》上有1条评论

  1. 袁源

    YUI({ combine: true, comboBase: ‘/min/?b=build&f=’, root: ”}).use(‘placeholder’, function(Y) { Y.all(‘.test’).plug(Y.Plugin.Placeholder);});

    不是 YUI 自带的功能?

发表评论