使用yuicompressor.jar实现对js、css文件的代码压缩
YUI Compressor是一个压缩js、css的工具,压缩后的文件几乎接近原文件的一半大小,该工具下载下来就是一个jar文件,它是用Java开发的,所以在运行的时候也是要依赖于jre环境,本文后面的介绍都是基于本机已经安装jre并且做好了配置的前提。
图1:yuicompressor help
上图是我在Windows的命令行中查看到的yuicompressor的一些命令的提示信息,翻译成中文如下:
语法: java -jar yuicompressor-x.y.z.jar [options] [input file] 通用参数: -h, --help 显示帮助信息 --type <js|css> 指定输入文件的文件类型 --charset <charset> 指定读取输入文件使用的编码 --line-break <column> 在指定的列后插入一个 line-bread 符号 -v, --verbose 显示info和warn级别的信息 -o <file> 指定输出文件。默认输出是控制台。 javascript专用参数: --nomunge 只压缩, 不对局部变量进行混淆。 --preserve-semi 保留所有的分号。 --disable-optimizations 禁止优化。
使用yuicompressor对js、css文件压缩的时候,首先将yuicompressor的jar文件下来下来,然后放在机器的某个位置(我下载的是yuicompressor-2.4.2.jar,放在的是C盘的根目录下,后面都是以此为例),然后就可以直接使用下面的命令对指定的文件进行压缩:
java -jar c:\yuicompressor-2.4.2.jar --type js --charset utf-8 d:\test01.js -o d:\test-min.js
上面的代码就是实现的对D盘下的test01.js这个文件进行压缩,压缩后保存在原位置,命名为test-min.js。基于这个实现原理,我写了下面的Java代码,这样只要运行该Java代码的main方法,并且修改其中的一些参数,就可以很方便的实现对某个目录下的所有的js、css的递归循环压缩,也可以直接指定文件名进行指定文件的压缩。
代码如下:
import java.io.File;
import java.io.IOException;
import java.util.Date;
/**
* 工具类:利用yuicompressor来对js、css文件进行压缩
*
* @author YEDWARD
*
*/
public class CompressorUtil {
/**
* main方法
*
* @param args
*/
public static void main(String[] args) {
/**
* 压缩时,将这里的:
* yuiPath替换成你机器上yuicompress文件的路径;
* filePath替换成要压缩的文件或文件夹路径;
* fileType替换成要压缩的文件类型(扩展名),只能是js、css两种类型;
* encoding替换成你要读取文件的编码格式
*/
String yuiPath = "c:\\yuicompressor-2.4.2.jar";
String filePath = "E:\\workspace\\MYAPP\\WebContent\\app";
String fileType = "js";
String encoding = "utf-8";
StringBuilder sb = new StringBuilder();
File file = new File(filePath);
if (fileType.equalsIgnoreCase("JS")) {
compressJS(yuiPath, sb, file, encoding);
}
if (fileType.equalsIgnoreCase("CSS")) {
compressCSS(yuiPath, sb, file, encoding);
}
String[] res = sb.toString().split("/n");
Runtime runTime = Runtime.getRuntime();
Date startTime = new Date();
Long count = 0L;
for (String cmd : res) {
if (!cmd.trim().equals("")) {
System.out.println(cmd);
try {
runTime.exec(cmd);
count++;
} catch (IOException e) {
e.printStackTrace();
}
}
}
Date endTime = new Date();
Long cost = endTime.getTime() - startTime.getTime();
System.out.println(fileType.toUpperCase() + "压缩完成,耗时:" + cost + "ms,共压缩文件个数:" + count);
}
/**
* 压缩JS文件
*/
public static void compressJS(String yuiPath, StringBuilder sb, File f, String encoding) {
if (f.isDirectory()) {
File[] files = f.listFiles();
// 如果某个文件夹是空文件夹,则跳过
if (files == null) {
return;
}
for (File file : files) {
compressJS(yuiPath, sb, file, encoding);
}
} else {
String fileName = f.getName();
if (fileName.endsWith(".js") && !fileName.endsWith("-min.js")) {
sb.append("java -jar ");
sb.append(yuiPath);
sb.append(" --type js --charset ");
sb.append(encoding + " " + f.getPath());
sb.append(" -o " + f.getPath().replace(".js", "-min.js"));
sb.append("/n");
}
}
}
/**
* 压缩CSS文件
*/
public static void compressCSS(String yuiPath, StringBuilder sb, File f, String encoding) {
if (f.isDirectory()) {
File[] files = f.listFiles();
// 如果某个文件夹是空文件夹,则跳过
if (files == null) {
return;
}
for (File file : files) {
compressCSS(yuiPath, sb, file, encoding);
}
} else {
String fileName = f.getName();
if (fileName.endsWith(".css") && !fileName.endsWith("-min.css")) {
sb.append("java -jar ");
sb.append(yuiPath);
sb.append(" --type css --charset ");
sb.append(encoding + " " + f.getPath());
sb.append(" -o " + f.getPath().replace(".css", "-min.css"));
sb.append("/n");
}
}
}
}直接复制上面代码放到编译器中编译运行,并且按需替换掉main方法中的yuiPath、filePath、fileType、encoding即可,压缩需要一段时间,所有的文件都压缩成功后,会出现类似如下图2所示的结果:
图2:压缩完成提示
这样就OK了,记得要先下载yuicompressor.jar文件,保存到本机,并且记得修改上面代码中的几个参数,本文后面会提供一个yuicompressor-2.4.2.jar版本,这是目前最新的,建议以后使用时下最新的版本进行压缩。
YUI Compressor-2.4.2下载地址:
yuicompressor-2.4.2.zip
下面,愉快的开始压缩吧!
建议继续学习:
- windows下压缩包在linux解压乱码的解决办法 (阅读:4919)
- php的echo为什么这么慢 (阅读:4863)
- 使用系统命令实现文件的压缩与加密 (阅读:4810)
- 启用memcached压缩注意事项 (阅读:4768)
- Android设计中的.9.png (阅读:4541)
- MySQL从压缩文件恢复数据 (阅读:4364)
- 前端性能优化之Html压缩 (阅读:4358)
- 项目中对模板和js,css文件进行压缩的处理类 (阅读:4240)
- mod_gzip:Apache的HTTP压缩优化 (阅读:4162)
- 开源压缩算法Zopfli介绍 (阅读:4138)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:叶德华的博客 来源: 叶德华的博客
- 标签: yuicompressor 压缩
- 发布时间:2015-06-04 10:25:43
-
[919] WordPress插件开发 -- 在插件使用 -
[134] 解决 nginx 反向代理网页首尾出现神秘字 -
[54] 整理了一份招PHP高级工程师的面试题 -
[52] 全站换域名时利用nginx和javascri -
[52] 海量小文件存储 -
[52] 如何保证一个程序在单台服务器上只有唯一实例( -
[51] Innodb分表太多或者表分区太多,会导致内 -
[50] 用 Jquery 模拟 select -
[49] CloudSMS:免费匿名的云短信 -
[48] jQuery性能优化指南

