用Gzip进行js的超强压缩

Gzip的官方网址为: 
http://www.gnu.org/software/gzip/ 

Gzip的使用很简单 

解压至某个目录,会看到有一个Gzip.exe文件,然后在命令窗口进入该目录,执行 
gzip ext-all.js 
ext-all.js马上变成为ext-all.js.gz 
大小从原来600多k摇身一变成了160多k,简直压细小很多。这回下载速度就非常快了。 
那么浏览器能否解析这种压缩文件?答案是肯定的,前提是告诉浏览器,这种文件需要解压,然后再执行,解压的过程由浏览器来执行。 
那么应用程序如何告诉浏览器,该文件需要解压呢,这得由服务器通过Http的Header指令来进行。 
在JOffice中,就是通过Filter来进行的。 

1.把ext.all.js.gz文件名改为ext.all.gzjs,Filter等一下就会拦截这种文件的访问。 

2.写一个Filter,完成向Header添加指令 

   代码如下: 

package com.htsoft.core.web.filter;    
    import java.io.IOException;    
    import java.util.HashMap;    
    import java.util.Iterator;    
    import java.util.Map;    
    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;    
        
    public class GzipJsFilter implements Filter {    
        Map headers = new HashMap();    
        public void destroy() {    
        }    
        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 {    
                request.setCharacterEncoding("UTF-8");    
                for(Iterator it = headers.entrySet().iterator();it.hasNext();) {    
                    Map.Entry entry = (Map.Entry)it.next();    
                    response.addHeader((String)entry.getKey(),(String)entry.getValue());    
                }    
                chain.doFilter(request, response);    
        }    
        
        public void init(FilterConfig config) throws ServletException {    
            String headersStr = config.getInitParameter("headers");    
            String[] headers = headersStr.split(",");    
            for(int i = 0; i < headers.length; i++) {    
                String[] temp = headers[i].split("=");    
                this.headers.put(temp[0].trim(), temp[1].trim());    
            }    
        }    
    }    
  
3.在WEB.xml 文件中,添加以下配置:  
  
   
  
<filter>      
    <filter-name>GzipJsFilter</filter-name>      
    <filter-class>com.htsoft.core.web.filter.GzipJsFilter</filter-class>      
    <init-param>      
        <param-name>headers</param-name>      
        <param-value>Content-Encoding=gzip</param-value>      
    </init-param>    
</filter>    
<filter-mapping>    
<filter-name>GzipJsFilter</filter-name>    
<url-pattern>*.gzjs</url-pattern>    
</filter-mapping>    
  
   
  
4.在index.jsp中引入该压缩文件:  
  <script type="text/javascript" src="<%=request.getContextPath()%>/ext3/ext-all.gzjs"></script>  

下面可能会用到,解决ie遇到gzjs下载问题的,没有试验:

<Connector   
              port="8080"   
              protocol="HTTP/1.1"  
              connectionTimeout="20000"  
              redirectPort="443"   
              URIEncoding="UTF-8"  
              compression="on"     
              noCompressionUserAgents="gozilla, traviata"     
              compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json"   
/>    
配置细节: 
compression="on"   开启压缩支持  
noCompressionUserAgents="gozilla, traviata"   不压缩的内容  
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json" 压缩的类型  

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值