让Extjs加加速

Extjs虽然有着华丽的界面,但是真正使用过的人才知道,它运行起来的速度是让人抓狂的,而导致速度慢的重要原因,就是js的加载。EXT的全部js是比较大的,一个ext-all-debug.js就达2m多,它的压缩版(去掉js中的换行及空格),也达600多k,这对于在网速不太快的时,下载js就得漫长的等待。其中日历任务控件,js多达四五个,每个js大小都达70多k,尽管我们采用了后加载的方式,则当用户点击我的任务功能时,才下载该js,但这样仍然很慢,因为下载的js很慢,鉴于此,在互联网上使用类似Joffice类似的程序,速度会使很多开发商不敢选用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);   
                 }   
     });   
}   

 

二.用Gzip进行js的超强压缩

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添加指令

package com.pccw.ehrcust.jso.util;

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>

 
可以看到浏览器解压后,其代码是一样的:


大家可以看到以上,这块是在外网使用的,其速度是比较快的。当然,浏览器解压这个文件需要一点时间,不过在本地解压是非常快的,可以不用管。
虽说不能完全解决其速度问题,但是还是能有所帮助。

 

本文转自:http://www.myext.cn/kaifa/11922.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值