博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yui压缩JS和CSS文件
阅读量:5158 次
发布时间:2019-06-13

本文共 7448 字,大约阅读时间需要 24 分钟。

 

  CSS和JS文件经常需要压缩,比如我们看到的XX.min.js是经过压缩的JS。

  压缩文件第一个是可以减小文件大小,第二个是对于JS文件,默认会去掉所有的注释,而且会去掉所有的分号,也会将我们的一些参数替换为一些简单的a,b之类的变量,从界面看起来非常难阅读,起到加密作用。

  常见的有好多压缩工具,这里使用yui进行压缩,首先需要下载yui的包:  yuicompressor-2.4.7.jar  ,可以到我的服务器下载:

 

1.查看yui使用帮助:

G:\>java -jar yuicompressor-2.4.7.jarUsage: java -jar yuicompressor-x.y.z.jar [options] [input file]Global Options  -h, --help                Displays this information  --type 
Specifies the type of the input file --charset
Read the input file using
--line-break
Insert a line break after the specified column number -v, --verbose Display informational messages and warnings -o
Place the output into
. Defaults to stdout. Multiple files can be processed using the following syntax: java -jar yuicompressor.jar -o '.css$:-min.css' *.css java -jar yuicompressor.jar -o '.js$:-min.js' *.jsJavaScript Options --nomunge Minify only, do not obfuscate --preserve-semi Preserve all semicolons --disable-optimizations Disable all micro optimizationsIf no input file is specified, it defaults to stdin. In this case, the 'type'option is required. Otherwise, the 'type' option is required only if the inputfile extension is neither 'js' nor 'css'.

 

 

2.压缩JS:

  默认会去掉所有的注释,而且会去掉所有的分号,也会将我们的一些参数替换为一些简单的a,b之类的变量,起到加密作用。

JS内容:

/** * 验证密码和账户 */function validate2(username, password) {    if (username != "zhangsan") {        alert("userName is error:" + c)    }    if (password != "123456") {        alert("password is error:" + d)    }};

 

源文件大小:220字节

 

 

 进行压缩:

G:\>java -jar yuicompressor-2.4.7.jar index.js -v -o index-min.js --charset UTF-8

参数解释:

index.js  需要压缩的源文件 -v -o 显示信息与指定输出文件名字 index-min.js   压缩后的文件 --charset  指定编码格式

 

 压缩后文件内容和大小:(被压缩成一行,注释被去掉,分号也被去掉)

function validate2(b,a){
if(b!="zhangsan"){alert("userName is error:"+c)}if(a!="123456"){alert("password is error:"+d)}};

 

 大小为:120字节

 

 

我们也可以保留分号:    --preserve-semi 参数

G:\>java -jar yuicompressor-2.4.7.jar index.js -v --preserve-semi -o index-min.js --charset UTF-8[WARNING] The symbol c is declared but is apparently never used.This code can probably be written in a more compact way.username!="zhangsan"){alert("userName is error:"+ ---> c <--- );}if(password!="123456"){[WARNING] The symbol d is declared but is apparently never used.This code can probably be written in a more compact way.password!="123456"){alert("password is error:"+ ---> d <--- );}}

 

压缩后内容:

function validate2(b,a){
if(b!="zhangsan"){alert("userName is error:"+c);}if(a!="123456"){alert("password is error:"+d);}}

 

 

 

 3.压缩CSS

G:\>java -jar yuicompressor-2.4.7.jar index.css -v -o index1-min.css --charset UTF-8

 

 

 

也可以写成bat脚本进行压缩JS和css,此处就不写了。

 

 

接下来研究Java中调用yui压缩JS和css。原理是Java调用RuntTime执行cmd中的一些命令,只是写了个for循环遍历文件夹下main的css和js文件进行遍历。同样依赖上面的jar包:

工具类如下:

package zdComputerTest;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Arrays;import java.util.Date;import java.util.List;/** * 通过yuicompressor压缩JS|CSS文件工具类 * @author Administrator * */public class CompressUtils {    private static final String encoding = "utf-8";    private static final String[] suffixArray = { ".js", ".css" };    public static void main(String[] args) {        String yuiPath = "G:/yuicompressor-2.4.7.jar";        String filePath = "G:/js";        compressFile(yuiPath, filePath);    }    /**     * 压缩指定文件夹下所有的js/css     *      * @param yuiPath     *            yuicompressor-2.4.7.jar文件路径     * @param filePath     *            要压缩的文件夹路径     */    public static void compressFile(String yuiPath, String filePath) {        File file = new File(filePath);        List
commondList = new ArrayList
(); initCommondList(yuiPath, commondList, file); excuteCompress(commondList); } /** * 执行压缩命令 * @param commondList */ private static void excuteCompress(List
commondList) { Runtime runTime = Runtime.getRuntime(); Date startTime = new Date(); Long count = 0L; for (String cmd : commondList) { try { System.out.println(cmd); runTime.exec(cmd); count++; } catch (IOException e) { e.printStackTrace(); } } Date endTime = new Date(); Long cost = endTime.getTime() - startTime.getTime(); System.out.println("压缩完成,耗时:" + cost + "ms,共压缩文件个数:" + count); } /** * 初始化压缩命令 * @param yuiPath * @param commondList * @param file */ private static void initCommondList(String yuiPath, List
commondList, File file) { if (file.isDirectory()) { File[] files = file.listFiles(); // 如果某个文件夹是空文件夹,则跳过 if (files == null) { return; } for (File f : files) { initCommondList(yuiPath, commondList, f); } } else { String fileName = file.getName(); String suffix = fileName.substring(fileName.lastIndexOf("."), fileName.length()); List
suffixList = Arrays.asList(suffixArray); if (suffixList.contains(suffix) && !fileName.endsWith("-min" + suffix)) { StringBuffer sb = new StringBuffer(); sb.append("java -jar "); sb.append(yuiPath); sb.append(" --type "); sb.append(suffix.substring(suffix.indexOf(".") + 1)); sb.append(" --charset "); sb.append(encoding).append(" "); sb.append(file.getPath()).append(" "); sb.append("-o").append(" "); sb.append(file.getPath().replace(suffix, "-min" + suffix)); commondList.add(sb.toString()); } } }}

 

4.Ant整合yui压缩JS的脚本

项目结构:

 

 build.xml脚本:(此脚本可以编译项目中的src下的文件和压缩JS和CSS)

 

 build.properties

tomcatPath=E:/tomcat/apache-tomcat-7.0.72jarName=commons-exam-codejarNumber=1.0.1examJsRootPath=${basedir}/WebContent/js

 

转载于:https://www.cnblogs.com/qlqwjy/p/9395443.html

你可能感兴趣的文章
语言基础(9):static, extern 和 inline
查看>>
windows linux—unix 跨平台通信集成控制系统
查看>>
【编程练习】复习一下树的遍历
查看>>
邮件和短信验证码
查看>>
(转)Android studio 使用心得(五)—代码混淆和破解apk
查看>>
构建之法阅读笔记03
查看>>
ES5_03_Object扩展
查看>>
Apache-ab 接口性能测试
查看>>
EF 4.1 Code First Walkthrough
查看>>
常用MySQL语法
查看>>
007API网关服务Zuul
查看>>
bzoj 2600: [Ioi2011]ricehub
查看>>
iOS __strong __weak @Strongify @Weakify
查看>>
thinkphp引入PHPExcel类---thinkPHP类库扩展-----引入没有采用命名空间的类库
查看>>
创建数据库,表
查看>>
Luogu 1970 NOIP2013 花匠 (贪心)
查看>>
javascript笔记---貌似大叔
查看>>
去重查询表mysql 中数据
查看>>
工厂模式
查看>>
AngularJS学习之旅—AngularJS 模块(十五)
查看>>