技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> CSS/HTML --> 使用yuicompressor.jar实现对js、css文件的代码压缩

使用yuicompressor.jar实现对js、css文件的代码压缩

浏览:2103次  出处信息

   YUI Compressor是一个压缩js、css的工具,压缩后的文件几乎接近原文件的一半大小,该工具下载下来就是一个jar文件,它是用Java开发的,所以在运行的时候也是要依赖于jre环境,本文后面的介绍都是基于本机已经安装jre并且做好了配置的前提。

yuicompressor help

图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

   下面,愉快的开始压缩吧!

建议继续学习:

  1. windows下压缩包在linux解压乱码的解决办法    (阅读:4026)
  2. 启用memcached压缩注意事项    (阅读:3949)
  3. php的echo为什么这么慢    (阅读:3886)
  4. 使用系统命令实现文件的压缩与加密    (阅读:3864)
  5. MySQL从压缩文件恢复数据    (阅读:3572)
  6. 前端性能优化之Html压缩    (阅读:3551)
  7. mod_gzip:Apache的HTTP压缩优化    (阅读:3451)
  8. 项目中对模板和js,css文件进行压缩的处理类    (阅读:3411)
  9. 为什么不压缩 HTML    (阅读:3362)
  10. 开源压缩算法Zopfli介绍    (阅读:3353)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1