海水正藍

          面朝大海,春暖花開
          posts - 145, comments - 29, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          提高EXT js的加載速度的方法

          Posted on 2013-08-13 16:48 小胡子 閱讀(352) 評論(0)  編輯  收藏 所屬分類: Ext
          我們知道,EXT的全部js是比較大的,一個ext-all-debug.js就達2m多,它的壓縮版(去掉js中的換行及空格),也達600多k,這對于在網速不太快的時,下載js就得漫長的等待。
          JOffice中的日歷任務控件,js多達四五個,每個js大小都達70多k,盡管我們采用了后加載的方式,則當用戶點擊我的任務功能時,才下載該js,但這樣仍然很慢,因為下載的js很慢
          ,鑒于此,在互聯網上使用類似Joffice類似的程序,速度會使很多開發商不敢選用ext作為開發技術。據本人當時參與移動一個內部采購平臺的開發,就是因為其運行程序慢,遭到移動的終端用戶的棄罵,
          所以,要想用EXT來開發應用,需要解決其運行慢的特點。


          我們可以從以下幾種方法來提高應用程序的運行速度:

          一.前期盡量少加載js.

             這點在Joffice中有比較好的運用,采用的是由ScriptMgr.load方法來完成,加載完成后,其會在body中插入一個div,只要當前頁面不被刷新,下次再訪問該功能時,不需要再加載js

             function $ImportJs(viewName,callback) {
              var b 
          = document.getElementById(viewName+'-hiden');
              
          if (b != null) {
                  var view 
          = eval('new ' + viewName + '()');
                  callback.call(
          this, view);
              } 
          else {
                  var jsArr 
          = eval('App.importJs.' + viewName);
                  
          if(jsArr==undefined){
                      var view 
          = eval('new ' + viewName + '()');
                      callback.call(
          this, view);
                      
          return ;
                  }
                  ScriptMgr.load({
                              scripts : jsArr,
                              callback : function() {
                                  
                                  Ext.DomHelper.append(document.body,
          "<div id='"
                                                          
          + viewName
                                                          
          + "-hiden' style='display:none'></div>");
                                  var view 
          = eval('new ' + viewName + '()');
                                  callback.call(
          this, view);
                              }
                  });
              }
          }


              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>  
          lt;
          /filter-mapping>  
          <servlet-mapping> 
          4.在index.jsp中引入該壓縮文件:
            <script type="text/javascript" src="<%=request.getContextPath()%>/ext3/ext-all.gzjs"></script>
           

          可以看到瀏覽器解壓后,其代碼是一樣的:

           

           

          大家可以看到以上,這塊是在外網使用的,其速度是比較快的。當然,瀏覽器解壓這個文件需要一點時間,不過在本地解壓是非??斓模梢圆挥霉堋?/p>

           

           

          三、通過Js緩存,更加可以提高EXT的加載速度,關于緩存,本文不作討論。

          原文出自:
          http://man1900.iteye.com/blog/515058
          主站蜘蛛池模板: 枞阳县| 秀山| 高陵县| 连云港市| 嵊泗县| 稻城县| 肥西县| 西充县| 乐安县| 咸丰县| 惠州市| 温宿县| 苗栗县| 奎屯市| 永德县| 平度市| 文安县| 文化| 三穗县| 日照市| 屯留县| 双桥区| 苏州市| 江油市| 高邮市| 巫溪县| 积石山| 中方县| 库车县| 汪清县| 封开县| 富民县| 杭锦后旗| 韶关市| 平利县| 洮南市| 望奎县| 社旗县| 光泽县| 阳信县| 镇平县|