完整的yuicompressor单个压缩和批量压缩以及gzip再次压缩,拦截器的配置等
下载地址:http://yuilibrary.com/download/yuicompressor/
个人认为现在yuicompressor是最安全,最值得信赖的压缩工具,至少到现在没出现过问题
1、单个压缩从yuicompressor-2.4.2.zip文件中解压出yuicompressor-2.4.2.jar,在命令窗口中执行以下命令:
java -jar yuicompressor-x.y.z.jar [options] [input file]
java -jar yuicompressor-x.y.z.jar -h //帮助
java -jar yuicompressor-x.y.z.jar a.js -o a-min.js //将a.js压缩成a-min.js
用此软件压缩后,可继续使用Gzip压缩。本工具也可压缩css。java -jar yuicompressor-x.y.z.jar [options] [input file]
java -jar yuicompressor-x.y.z.jar -h //帮助
java -jar yuicompressor-x.y.z.jar a.js -o a-min.js //将a.js压缩成a-min.js
用此软件压缩后,可继续使用Gzip压缩。本工具也可压缩css。
首先建立一个DOS批处理脚本来自动处理目录和子目录下的所有js和css文件 myCompressor.bat
当然 名字可以自己随意起,内容如下,复制的时候每行之前最好不要留空,
-----------
@echo off
::设置YUI Compressor启动目录
SET YUIFOLDER=E:\compressor\yuicompressor-2.4.7\build
::设置你的JS和CSS根目录,脚本会自动按树层次查找和压缩所有的JS和CSS
SET JSFOLDER=E:\myJS
echo 正在查找 JavaScript, CSS ...
chdir /d %JSFOLDER%
for /r . %%a in (*.js *.css) do (
@echo 正在压缩 %%~a ...
@java -jar %YUIFOLDER%\yuicompressor-2.4.7.jar --charset UTF-8 %%~fa -o %%~fa
)
echo 完成!
pause & exit
-----------
注释:
3、继续gzip压缩1、E:\compressor\yuicompressor-2.4.7\build 是 你下载的yuicompressor包里的路径,到bulid这一级
2、E:\myJS 是你存放原js和css的目录,压缩后生成的文件也在这个地方
3、当版本有所不同的时候,注意修改@java -jar %YUIFOLDER%\yuicompressor-2.4.7.jar --charset UTF-8 %%~fa -o %%~fa
如果你想继续压缩,使用gzip还是可以的,简单提供给大家指令,不具体说了从gzip-1.3.12-1-bin.zip文件中解压出gzip.exe压缩之后的文件已经不是js文件了,我们压缩成了.gzjs或者.gzcs,这时候浏览器已经不认这些文件了,我们就需要写拦截器做处理, 给浏览器对象设置header,web.xml配置:<!-- 配置js/css静态压缩过滤器-开始 -->
在命令窗口中执行以下命令:
gzip -h //帮助信息gzip -V //版本信息gzip jquery-1.2.3.js //压缩源文件,默认以.gz为扩展名,结束后删除源文件gzip jquery-1.2.3.js -S .gzjs //压缩源文件,以.gzjs为扩展名gzip jquery-1.2.3.js -S .gzjs -1 //最快压缩gzip jquery-1.2.3.js -S .gzjs -9 //最高压缩
本工具也可压缩css。
<filter><filter-name>AddHeaderFilter</filter-name><filter-class>com.biox.base.AddGzipHeaderFilter</filter-class><init-param><param-name>headers</param-name><param-value>Content-Encoding=gzip</param-value></init-param></filter><filter-mapping><filter-name>AddHeaderFilter</filter-name><url-pattern>*.gzjs</url-pattern></filter-mapping><filter-mapping><filter-name>AddHeaderFilter</filter-name><url-pattern>*.gzcs</url-pattern></filter-mapping><!-- 配置js/css静态压缩过滤器-结束 -->
拦截器AddHeaderFilter代码:
package com.biox.base;import java.io.IOException;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** 动态添加Header* @ClassName: AddGzipHeaderFilter* @Description: TODO* @author SUNCY* @date 2013-9-2 下午4:40:06**/public class AddGzipHeaderFilter implements Filter {Map<String, String> headers = new HashMap<String, String>();@Overridepublic void init(FilterConfig config) throws ServletException {String param = config.getInitParameter("headers");// 此属性在应用中web.xml中设置String[] headers = param.split(",");for (int i = 0; i < headers.length; i++) {String[] temp = headers[i].split("=");this.headers.put(temp[0].trim(), temp[1].trim());}}@Overridepublic void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {if (req instanceof HttpServletRequest) {doFilter((HttpServletRequest) req, (HttpServletResponse) res, chain);} else {chain.doFilter(req, res);}}public void doFilter(HttpServletRequest request,HttpServletResponse response, FilterChain chain)throws IOException, ServletException {Iterator<Entry<String, String>> it = headers.entrySet().iterator();for (; it.hasNext();) {Entry<String, String> entry = it.next();response.addHeader((String) entry.getKey(),(String) entry.getValue());}chain.doFilter(request, response);}@Overridepublic void destroy() {}}