用Gzip进行js的超强压缩
2010-04-08 14:46
204 查看
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添加指令
代码如下:
Java代码
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>
《servlet-mapping>
4.在index.jsp中引入该压缩文件:
《script type="text/javascript"
src="<%=request.getContextPath()%>/ext3/ext-all.gzjs">《/script>
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添加指令
代码如下:
Java代码
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>
《servlet-mapping>
4.在index.jsp中引入该压缩文件:
《script type="text/javascript"
src="<%=request.getContextPath()%>/ext3/ext-all.gzjs">《/script>
相关文章推荐
- 用Gzip进行js的超强压缩 收藏
- 用Gzip进行js的超强压缩
- pako.js对数据进行gzip压缩传递到后台解析,解决数据量大的请求问题
- 使用PHP和GZip压缩网站JS/CSS文件加速网站访问速度
- 关于nginx gzip压缩js没有生效的记录
- 针对ASP.NET页面实时进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)
- okhttp框架-如何对请求数据进行GZIP压缩
- IIS启用GZip压缩JS/CSS文件的设置方法
- Java使用GZIP进行压缩和解压
- IIS7配置Gzip压缩 JS压强失败的原因
- 减小网络传输图片大小,使用gzip进行压缩
- tomcat 启用Gzip 压缩进行优化
- 用Gzip进行js的超强压缩
- php使用gzip压缩传输js和css文件的方法
- 使用GZIPOutputStream和GZIPInputStream进行压缩解压文件
- IIS7下js文件启用Gzip后却不压缩的解决方法
- 获取运用了GZIP技术进行压缩的网页的Html代码
- maven中用yuicompressor和closure-compiler对js、css文件进行压缩
- HttpCLient实现对被GZip压缩过的Response进行解压
- Grunt:多个css,js,进行单独压缩