zoukankan      html  css  js  c++  java
  • 完整的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。


    2、批量压缩

    首先建立一个DOS批处理脚本来自动处理目录和子目录下的所有js和css文件  myCompressor.bat 

    当然 名字可以自己随意起,内容如下,复制的时候每行之前最好不要留空,

    -----------

    @echo off

    ::设置YUI Compressor启动目录

    SET YUIFOLDER=E:compressoryuicompressor-2.4.7uild

    ::设置你的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

    -----------

    注释:

    1、E:compressoryuicompressor-2.4.7uild    是  你下载的yuicompressor包里的路径,到bulid这一级

     2、E:myJS   是你存放原js和css的目录,压缩后生成的文件也在这个地方

     3、当版本有所不同的时候,注意修改@java -jar %YUIFOLDER%yuicompressor-2.4.7.jar --charset UTF-8 %%~fa -o %%~fa

    3、继续gzip压缩

    如果你想继续压缩,使用gzip还是可以的,简单提供给大家指令,不具体说了
    从gzip-1.3.12-1-bin.zip文件中解压出gzip.exe


    在命令窗口中执行以下命令:


    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。
     
          压缩之后的文件已经不是js文件了,我们压缩成了.gzjs或者.gzcs,这时候浏览器已经不认这些文件了,我们就需要写拦截器做处理,
          给浏览器对象设置header,
    web.xml
    配置:
    <!-- 配置js/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>();


    @Override
    public 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());
    }
    }


    @Override
    public 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);
    }


    @Override
    public void destroy() {
    }


    }

  • 相关阅读:
    编程习俗和设计模式
    Design Patterns Quick Memo
    Monty Hall Problem
    RPG game: the lost Roman Army
    A Geeky Game Idea
    App自动化测试:等待webview页面数据加载完成
    Android自动化测试元素定位
    IOS苹果开发者免费证书申请&使用Xcode打包
    pytest测试夹具(fixture)简介
    Unittest与Pytest参数化区别
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3297068.html
Copyright © 2011-2022 走看看