目前项目中CMS管理系统会将静态资源比如CSS、JS或者Image推送到静态Web服务器(DFS文件系统),而把动态模板或者静态html片段推送到动态Web服务器。这个CMS是基于PHP的,对JS和CSS要做一层过滤,即合并、替换、压缩。合并和替换都没问题,压缩的时候在选择工具的时候考虑了Google Closure Compiler和YUI Compressor,目前还在测试中,先决定使用YUI Compressor(现在JQuery 1.4使用了Google Closure Compiler来压缩),可是CMS在使用的时候如果基于命令行,那么针对不同的平台就要执行不同的脚本,而且方式也不对,CMS在读取文件对内容执行了合并和替换后获得的就是内容,难道再输出到一个临时文件执行命令行?这样做不是很好的方式,上网搜了下资料,基本都是用命令行直接压缩的。我就看了下源码,参照com.yahoo.platform.yui.compressor.YUICompressor写了个工具类,以基于Hessian的Web程序的方式发布了一个服务(考虑到以后可能还会添加服务,就没有直接简单的用输出流的方式输出字符串),然后CMS调用这个服务获得压缩后的文本。代码如下:
接口
public interface ICompressorService {
/**
* JS或CSS压缩服务
* 为了和CMS系统相一致,这里在压缩后的文本内容加的第一个标识字符为0时表示是返回正常的压缩后的文本信息,为1则是返回异常信息
*
* @param type 压缩的类型(js/css) 类型:String
* @param content js/css的文本内容 类型:String
* @return 压缩后的结果(返回类型+压缩后的文本内容 0 压缩后的文本信息;1 异常信息) 类型:String
*/
public String compress(String type, String content);
实现类
public class CompressorServiceImpl implements ICompressorService {
//记录JS校验错误
private StringBuffer errs = null;
@Override
public String compress(String type, String content) {
Reader in = null;
Writer out = null;
ByteArrayOutputStream byteOut = null;
ByteArrayInputStream byteIn = null;
String dcontent = null;
try {
String charset = "UTF-8";
if (type == null) {
return "1"+"type can not be null";
}
if (!type.equalsIgnoreCase("js") && !type.equalsIgnoreCase("css")) {
return "1"+"type can only be 'js' or 'css'";
}
byteIn = new ByteArrayInputStream(URLDecoder.decode(content,"UTF-8").getBytes("UTF-8"));
in = new InputStreamReader(byteIn,"UTF-8");
int linebreakpos = -1;
byteOut = new ByteArrayOutputStream(1024000);
if (type.equalsIgnoreCase("js")) {
//只在压缩JS的时候才实例化
errs = new StringBuffer();
try {
JavaScriptCompressor compressor = new JavaScriptCompressor(in, new ErrorReporter() {
public void warning(String message, String sourceName, int line, String lineSource,
int lineOffset) {
if (line < 0) {
logErr("\n[WARNING] " + message);
} else {
logErr("\n[WARNING] " + line + ':' + lineOffset + ':' + message);
}
}
public void error(String message, String sourceName, int line, String lineSource, int lineOffset) {
if (line < 0) {
logErr("\n[ERROR] " + message);
} else {
logErr("\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);
}
});
out = new OutputStreamWriter(byteOut, charset);
boolean munge = true;
boolean preserveAllSemiColons = false;
boolean disableOptimizations = false;
compressor.compress(out, linebreakpos, munge, false, preserveAllSemiColons, disableOptimizations);
out.flush();
dcontent = URLEncoder.encode(byteOut.toString("UTF-8"),"UTF-8");
} catch (EvaluatorException e) {
e.printStackTrace();
return "1"+(errs==null?"":errs.toString())+e.getMessage();
}
} else if (type.equalsIgnoreCase("css")) {
CssCompressor compressor = new CssCompressor(in);
out = new OutputStreamWriter(byteOut, charset);
compressor.compress(out, linebreakpos);
out.flush();
dcontent = URLEncoder.encode(byteOut.toString("UTF-8"),"UTF-8");
}
} catch (IOException e) {
e.printStackTrace();
return "1"+e.getMessage();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
return "1"+e.getMessage();
}
}
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
return "1"+e.getMessage();
}
}
if(byteIn != null){
try {
byteIn.close();
} catch (IOException e) {
e.printStackTrace();
return "1"+e.getMessage();
}
}
if(byteOut != null){
try {
byteOut.close();
} catch (IOException e) {
e.printStackTrace();
return "1"+e.getMessage();
}
}
}
return "0"+dcontent;
}
private void logErr(String msg){
System.err.println(msg);
if(errs != null){
errs.append(msg);
}
}
}
分享到:
相关推荐
这个“YUI compressor右键压缩脚本”提供了一种便捷的方式,使得用户无需通过命令行或图形用户界面(GUI)就能快速对JS(JavaScript)和CSS文件进行压缩,大大简化了工作流程。 首先,我们来深入了解YUI Compressor...
java -jar yuicompressor.jar --type js -o script.min.js script.js ``` 这两个命令分别将原始的CSS和JavaScript文件压缩成更小的`style.min.css`和`script.min.js`。`-o`参数指定输出文件名,`--type js`指定了...
yuicompressor-2.4.2.jar yuicompressor-2.4.7.jar jsZip.exe yuicompressor yui compressor js压缩工具 javascript压缩工具 css压缩工具 ------------------------------------ //压缩JS java -jar yui...
对于Idea用户,可以通过安装第三方插件实现yuicompressor的集成,这样在编译项目时,可以直接对JavaScript和CSS文件进行自动压缩,简化了工作流程,提高了开发效率。 在Idea中配置yuicompressor,通常需要以下步骤...
在提供的文件中,`compressor.bat`是一个批处理脚本,用于调用`yuicompressor.jar`执行压缩任务。使用步骤如下: 1. **环境准备**:确保安装了Java运行环境(JRE)。 2. **运行脚本**:双击`compressor.bat`,或者...
用yuicompressor-2.4.7压缩你的JS和CSS 最近做了一个项目,使用了Ext框架,项目做好了,结果客户一试用,打开一个页面要6秒,这个页面是用户经常要用的,要频繁打开的,这样用户就受不了了,怎么办?怎么办?怎么...
标题 "ant和yuicompressor 压缩css、js方案" 涉及到的是在软件开发中如何使用构建工具Ant以及JavaScript压缩工具YUI Compressor来优化前端资源,特别是CSS和JavaScript文件。这两个工具在Web开发中起着至关重要的...
**JavaScript压缩工具——YUICompressor** YUICompressor是一款由Yahoo开发的高效JavaScript和CSS压缩工具。它通过删除空格、换行符以及不必要的字符,有效地减小了JavaScript和CSS文件的大小,从而提高了网页的...
YUICompressor在压缩的过程中无法合并文件,如处理10个文件只能生成10个文件,于是写了一个自动化脚本,只需修改一下criptList.txt文件,及可将里边的文件合并压缩成一个文件。 注:jar包是在win7 32位环境下编译
**YUI Compressor** 是一个由Yahoo开发的开源JavaScript和CSS压缩工具,旨在减少Web页面加载时间,提高网站性能。它的主要功能是去除代码中的空白、注释,并进行变量名混淆,从而减小文件大小,加快网页加载速度。在...
java -jar yuicompressor-2.4.2.jar -o compressed.js input.js ``` 对于CSS文件,命令类似,只是扩展名不同。此外,`YUI Compressor` 还支持通过参数配置压缩级别、是否保留注释等选项。 5. **与其他工具的比较...
这里`yuicompressor-x.x.x.jar`是YUI Compressor的jar文件,`input.js`是要压缩的源文件,`output.js`是压缩后的目标文件,`--type js`指定压缩类型为JavaScript。 3. 集成到构建流程:YUI Compressor可以与构建...
2. **延迟加载**:对于非首屏内容,可以使用YUI Compressor压缩后,再配合延迟加载技术,提高页面初始化速度。 3. **版本控制**:每次更新后,给压缩后的文件加上不同的哈希值,避免客户端缓存旧版本,确保用户始终...
yuicompressor压缩html、js、css、scss、jsp 方法:Monitoring.init 初始化基本参数: suffix : 压缩的后缀,如min,common.js压缩后为common.min.js,html与jsp不参与 filterDir:过滤目录,正则表达式,如(./...
1. **命令行工具**:通过安装Java Development Kit (JDK),然后下载YUI Compressor的jar文件,可以在命令行中使用`java -jar yuicompressor.jar`命令进行压缩操作。 2. **集成开发环境插件**:许多IDE如Eclipse、...
《yuicompressor:高效能的JS与CSS压缩工具》 在Web开发中,为了提高页面加载速度和优化用户体验,对JavaScript(JS)和Cascading Style Sheets(CSS)进行压缩是一项必不可少的工作。yuicompressor,由雅虎(Yahoo...
YUI Compressor是控制台的,本人基于JAVA写了个GUI版, * 可添加多个目录文件,批量压缩JavaScript,CSS文件; * 可设置发布目录,将压缩后的文件集中保存到该处; * 可将调试信息保存到文件中; * 可保置当前压缩文件...
要在Maven项目中使用`yuicompressor-maven-plugin`,首先需要在项目的`pom.xml`文件中添加插件配置。以下是一个基本配置示例: ```xml ... ... <groupId>net.alchim31.maven</groupId> <artifactId>yui...