项目进入二期了每次领导们在外面访问在云计算机上的项目总是抱怨说页面每次都打开的很慢,而且数据量都很小,一天到晚的催促我们解决这个问题,唉!没办法这个问题落在我的身上了,最开始还以为是程序代码写的问题,装了一个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中的配置
4.HeaderFilter代码
5.以下在JSP上引用即可
<script src="${pageContext.request.contextPath}/js/new/jquery.gzjs"></script>
一.下面讲述将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>