javascript的gzip静态解压

项目进入二期了每次领导们在外面访问在云计算机上的项目总是抱怨说页面每次都打开的很慢,而且数据量都很小,一天到晚的催促我们解决这个问题,唉!没办法这个问题落在我的身上了,最开始还以为是程序代码写的问题,装了一个IEHttpAnalyzer测了一下页面的请求响应时间大部分时间都耗在JS的下载上面了,当我查看页面源代码的时候惊呆了,基本上每个页面都引用了10~18个JS :cry: 没办法只能考虑是否能删减或者压缩,经过几轮测试后了后者,但是在考虑压缩JS的时候传统的JS压缩(删除注释,删除多余空格等)提供的压缩率有时还是不尽不意;现在的问题是这种动态的压缩会导致服务器CPU占用率过高,现在我想到的解决辨法是通过提供静态压缩(就是将JS预先通过7-zip压缩好)

一.下面讲述将JS压缩成gzjs以及在tomcat中的应用的步骤
1.使用jquery.js通过7-zip压缩,压缩的时候选择压压缩格式为:GZip,然后压缩结束后将生成一个jquery.js.gz,将它更名成jquery.gzjs
2.设置header,我编写了一个简单的HeadersFilter来将所有以gzjs结尾的文件增加设置header Content-Encoding=gzip
3.web.xml中的配置

<filter>
<filter-name>HeaderFilter</filter-name>
<filter-class>
com.oa.filter.HeaderFilter
</filter-class>
<init-param>
<param-name>headers</param-name>
<param-value>Content-Encoding=gzip</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>HeaderFilter</filter-name>
<url-pattern>*.gzjs</url-pattern>
</filter-mapping>



4.HeaderFilter代码

package com.oa.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 HeaderFilter 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 {
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());
}
}

}



5.以下在JSP上引用即可
<script src="${pageContext.request.contextPath}/js/new/jquery.gzjs"></script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值