使用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解压乱码的解决办法 (阅读:4226)
- 启用memcached压缩注意事项 (阅读:4138)
- php的echo为什么这么慢 (阅读:4111)
- 使用系统命令实现文件的压缩与加密 (阅读:4084)
- mod_gzip:Apache的HTTP压缩优化 (阅读:3756)
- MySQL从压缩文件恢复数据 (阅读:3758)
- 前端性能优化之Html压缩 (阅读:3740)
- 项目中对模板和js,css文件进行压缩的处理类 (阅读:3716)
- Android设计中的.9.png (阅读:3568)
- 为什么不压缩 HTML (阅读:3535)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:叶德华的博客 来源: 叶德华的博客
- 标签: yuicompressor 压缩
- 发布时间:2015-06-04 10:25:43
- [69] Twitter/微博客的学习摘要
- [67] IOS安全–浅谈关于IOS加固的几种方法
- [65] 如何拿下简短的域名
- [65] android 开发入门
- [63] find命令的一点注意事项
- [62] Go Reflect 性能
- [61] 流程管理与用户研究
- [60] Oracle MTS模式下 进程地址与会话信
- [59] 图书馆的世界纪录
- [57] 读书笔记-壹百度:百度十年千倍的29条法则