extjs GZIP压缩问题
yunhaifeiwu
2008-07-11
经过不断努力,发现传说中的GZIP静态压缩,IE6 与 IE7对它支持很差劲。
IE 6 据说ie6的sp1才支持;而 ie7直接就屏掉。对于firefox 3来说,其GZIP格式要设成x-gzip才能支持。 我的测试源码根据badqiu网友的相关文章而来 web.xml (java servlet配置文档) 配置要注意:firefox3 关键处要把Content-Encoding的值设成x-gzip;而不是原文中的gzip <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>redirect.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>AddHeaderFilter</filter-name> <filter-class>badqiu.web.filter.AddHeaderFilter</filter-class> <init-param> <param-name>headers</param-name> <param-value>Content-Encoding=x-gzip</param-value> </init-param> </filter> <filter-mapping> <filter-name>AddHeaderFilter</filter-name> <url-pattern>*.gz</url-pattern> </filter-mapping> </web-app> 过滤器中 String str = request.getHeader("Accept-Encoding"); 观察ie 6 ie 7返回的是null值 另外原文中的 public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) 函数名要更改。否在,在netbeans 6.1中根本就不执行。 我后缀了一下1 过滤器 package badqiu.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 AddHeaderFilter implements Filter { public Map headers = new HashMap(); public void destroy() { } public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { if(req instanceof HttpServletRequest) { doFilter1((HttpServletRequest)req, (HttpServletResponse)res, chain); }else { chain.doFilter(req, res); } } public void doFilter1(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { // String str = request.getHeader("Accept-Encoding"); // if (str != null) // { // // str = str.toLowerCase(); // if (str.contains("gzip")){ // response.addHeader("Content-Encoding","gzip"); // } // else if (str.contains("deflate")) { // response.addHeader("Content-Encoding","deflate"); // } // else if (str.contains("x-gzip")) { // response.addHeader("Content-Encoding","x-gzip"); // } // response.addHeader("Content-Encoding","gzip|x-gzip"); // // } 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 aa="aa"; String bb=aa; String headersStr = config.getInitParameter("headers"); String[] headersl = headersStr.split(","); for(int i = 0; i < headersl.length; i++) { String[] temp = headersl[i].split("="); this.headers.put(temp[0].trim(), temp[1].trim()); } } } 测试代码 对 ext-all.js进行压缩后,压缩后的文件名为ext-all.js.gz(有136k) <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="resources/ext21/resources/css/ext-all.css" /> <link rel="stylesheet" type="text/css" href="resources/ext21/resources/css/fyhC.css" /> <script type="text/javascript" src="resources/ext21/adapter/ext/ext-base.js"> </script> <script type="text/javascript" src="resources/ext21/ext-all.js.gz" ></script> </head> <script> Ext.onReady(function(){ Ext.state.Manager.setProvider(new Ext.state.CookieProvider()); var f=new Ext.form.FormPanel({ // renderTo:"hello",//定位到名为hello的Div节点 title:"用户信息录入框", url : "login.do", baseParams:{aa:"bb"}, height:130, width:320, labelWidth:60, labelAlign:"right", frame:true, defaults:{width:180,xtype:"textfield"}, items:[{ xtype:"textfield", name:"username", fieldLabel:"姓名" }, { xtype:"textfield", name:"password", fieldLabel:"密码" } ], buttons:[{ text:"加载表单数据", handler:s },{ text:"新增cookie", handler:ss },{ text:"新增session", handler:sss }] }); //表单有两种与服务器的通信方式,submit与load //两者都必须要求服务器给出一个json字符串, //当成功时json字符串形如: "{success: true, data: // { username: \"王五\", password: \"789\"}}"; //当失败时json字符串形如: {success: false, errors: // { username: \"姓名不能为空\", password: \"必须是数字!\"}}"; function s() { f.form.load({//服务器为客户端的表单提供值 // f.form.submit({//客户端的数据提交给服务器 waitTitle:"请稍候", waitMsg:"正在提交表单数据,请稍候。。。。。。", url:" login.do", method:"POST", success:function(form, action) { // Ext.state.Manager.set("name2","dx"); alert("提交成功!"); alert(action.result.data.username); }, failure:function(form ,action) { alert("数据加载失败!"); alert(action.response.responseText) } }) } function ss(){ var ddd= Ext.Ajax.request({ url:'login.do', method: 'post', params:{aa:'bar'} }); } function sss(){ var ddd= Ext.Ajax.request({ url:'login.do', method: 'post', success:function(form, action) { // Ext.state.Manager.set("name2","dx"); alert("提交成功!"); // window.location ("dis.do"); window.open ("dis.do","new",""); // document.write(form.responseText); }, params:{aa:'bar1'} }); } var win=new Ext.Window({ width:400, height:300, maximizable:true, items:f //把上面的formPanel(要去掉)rendetTo放在窗口中 }); win.show(); }); </script> <body> <div id="aa"/> <div id="hello"/> </body> </html> |
|
yunhaifeiwu
2008-07-11
本社区的jindw 写了一个javascript 压缩程序。很好用,很强悍!压缩ext-all.js后的js文件288k,接近一半的压缩比。
特别说明:jsa压缩后的文件格式仍然是js.这个免了解压缩的烦恼了! 其原理大体是:把js中的注释空格之类的去掉,把原来的变量,参数名之类的用简单的字符(尽可能是一两位字符)代替。 目前2.0Beta版 官方下载地址: http://www.xidea.org/ --------------------- 恨死gzip了!不过还是打算用一下吧,firefox还支持。 |
|
yunhaifeiwu
2008-07-11
经本机测试,非网络。
发现用jsa压缩后,比用gzip快,虽然gzip压缩比高(压缩后是136k)。估计是解压也要代价吧. |
|
popl2003
2008-07-23
GZIP静态压缩,应该一般比较高的版本浏览器都可以用吧.我现在就在用着.
|