wabkaka之前新增js代码压缩功能后,收到一些网友的来信,给我反馈了一些意见。在谈到实现方法的时候,网友也谈到了自己的心得,比如什么方法实现起来比较简单,什么方法执行起来速度最快,什么方法的压缩率最高,等等。
一位网友给我提供了一份用java实现的js代码压缩程序,因我机器没有配置java环境,故没有测试,现收藏起来供自己日后有需要时使用,有兴趣的网友也可以拿去研究研究吧。
代码如下:
package app.user.model;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.Writer;
import org.junit.Test;
import org.mozilla.javascript.ErrorReporter;
import org.mozilla.javascript.EvaluatorException;
import com.yahoo.platform.yui.compressor.CssCompressor;
import com.yahoo.platform.yui.compressor.JavaScriptCompressor;
public class TestJsZip{
File dir=new File("E:\\workspace\\JSCompress\\test.js");
int linebreakpos = -1;
boolean munge=true;
boolean verbose=false;
boolean preserveAllSemiColons=false;
boolean disableOptimizations=false;
@Test
public void testMain() throws Exception{
checkFile(dir);
}
public void checkFile(File file) throws Exception{
if(file.getName().endsWith(".svn"))
return;
if(file.isFile()){
jsZip(file);
return;
}
File[] files=file.listFiles();
if(files==null||files.length==0)
return;
for(File f:files){
if(file.getName().endsWith(".svn"))
return;
if(file.isFile()){
jsZip(file);
continue;
}
checkFile(f);
}
}
public void jsZip(File file) throws Exception{
String fileName=file.getName();
System.out.println(fileName);
if(fileName.endsWith(".js")==false&&fileName.endsWith(".css")==false){
return;
}
Reader in=new FileReader(file);
String filePath=file.getAbsolutePath();
File tempFile=new File(filePath+".tempFile");
Writer out=new FileWriter(tempFile);
if(fileName.endsWith(".js")){
JavaScriptCompressor jscompressor=new JavaScriptCompressor(in, new ErrorReporter() {
public void warning(String message, String sourceName,
int line, String lineSource, int lineOffset) {
if (line < 0) {
System.err.println("\n[WARNING] " + message);
} else {
System.err.println("\n[WARNING] " + line + ':' + lineOffset + ':' + message);
}
}
public void error(String message, String sourceName,
int line, String lineSource, int lineOffset) {
if (line < 0) {
System.err.println("\n[ERROR] " + message);
} else {
System.err.println("\n[ERROR] " + line + ':' + lineOffset + ':' + message);
}
}
public EvaluatorException runtimeError(String message, String sourceName,
int line, String lineSource, int lineOffset) {
error(message, sourceName, line, lineSource, lineOffset);
return new EvaluatorException(message);
}
});
jscompressor.compress(out, linebreakpos, munge, verbose, preserveAllSemiColons, disableOptimizations);
}else if(fileName.endsWith(".css")){
CssCompressor csscompressor = new CssCompressor(in);
csscompressor.compress(out, linebreakpos);
}
out.close();
in.close();
file.delete();
tempFile.renameTo(file);
tempFile.delete();
}
}
该程序使用了yahoo的YUI组件,下载地址:http://yuilibrary.com/downloads/#yuicompressor,英文帮助文档地址:http://developer.yahoo.com/yui/compressor/,所以测试该代码的时候请先去下载该组件。
☉Java和Javascript获取当前时间的方法 (2009-11-12 16:24:25)
☉java中用正则表达式判断字符串是否数字 (2009-11-9 20:1:50)
☉Java怎样生成随机字符串 (2009-11-5 19:43:42)
☉JAVA开发中URL中文参数乱码的解决方法 (2009-11-3 19:50:14)
☉怎样查看Jsp编译后生成的Java文件 (2009-10-23 22:2:16)
☉Jsp代码加感叹号与不加感叹号的区别 (2009-10-22 19:32:37)
☉Java中String与Int怎样相互转换 (2009-10-22 19:9:16)
☉在Java里判断字符串是否相等 (2009-10-18 13:15:41)
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。