记忆盒子

把记忆装进灰色的盒子,封装起来,那年那月,重新拾起。

首页搜索目录
search
当前主题: 软件编程

java实现的js代码压缩程序

作者:Kaka    时间:2012-8-12 0:42:36    浏览:    评论:16

      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/,所以测试该代码的时候请先去下载该组件。

加入本站QQ群(312716741),交流分享网站建设、优化、SEO技术。。。

 

上一篇: 百度SEO:标题带网址属于过度优化行为
下一篇: windows xp iis5.1安装配置php环境

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客                   QQ交流群(312716741)

  • 通过Google订阅本站 通过鲜果订阅本站 通过抓虾订阅本站
  • 通过QQ邮箱订阅本站 通过Yahoo订阅本站 通过有道订阅本站

Search

最新评论及回复

最近留言

网站分类

Powered By Z-Blog 1.8 Walle Build 91204 Designed by Han'space

Copyright @2009 All Rights Reserved. 粤ICP备09073737号

Powered By Z-Blog 1.8 Walle Build 91204
Copyright @2009 All Rights Reserved.