`
man1900
  • 浏览: 429384 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

    博客分类:
  • EXT3
阅读更多

我们知道,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);
					}
		});
	}
}

 二.用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.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>
 

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

 

 

大家可以看到以上,这块是在外网使用的,其速度是比较快的。当然,浏览器解压这个文件需要一点时间,不过在本地解压是非常快的,可以不用管。

 

 

三、通过Js缓存,更加可以提高EXT的加载速度,关于缓存,本文不作讨论。

 

  • 大小: 55 KB
  • 大小: 56.3 KB
分享到:
评论

相关推荐

    ansys maxwell

    ansys maxwell

    matlab基于不确定性可达性优化的自主鲁棒操作.zip

    matlab基于不确定性可达性优化的自主鲁棒操作.zip

    pytest-2.8.0.zip

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    信息安全课程实验C++实现DES等算法源代码

    信息安全课程实验C++实现DES等算法源代码

    基于知识图谱的医疗诊断知识问答系统python源码+项目说明.zip

    环境 python >= 3.6 pyahocorasick==1.4.2 requests==2.25.1 gevent==1.4.0 jieba==0.42.1 six==1.15.0 gensim==3.8.3 matplotlib==3.1.3 Flask==1.1.1 numpy==1.16.0 bert4keras==0.9.1 tensorflow==1.14.0 Keras==2.3.1 py2neo==2020.1.1 tqdm==4.42.1 pandas==1.0.1 termcolor==1.1.0 itchat==1.3.10 ahocorasick==0.9 flask_compress==1.9.0 flask_cors==3.0.10 flask_json==0.3.4 GPUtil==1.4.0 pyzmq==22.0.3 scikit_learn==0.24.1 效果展示 为能最简化使用该系统,不需要繁杂的部署各种七七八八的东西,当前版本使用的itchat将问答功能集成到微信做演示,这需要你的微信能登入网页微信才能使用itchat;另外对话上下文并没

    一个高品质的音乐共享和流媒体轻量音乐程序网站在线音乐源码

    一个高品质的音乐共享和流媒体轻量音乐程序网站在线音乐源码,是创建您自己的音乐流媒体网站的最佳方式! 最新版本: 添加插件系统,现在开发人员可以为程序制作插件并在更新后保留您的自定义设置。 固定的2 个以上的小错误。 安装所需:nginx/apache,mysql5.6+,php7+ 搭建说明:看源码内详细说明

    实现的金融风控贷款违约预测python源码.zip

    实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip实现的金融风控贷款违约预测python源码.zip

    麦肯锡—xx数码公司发展战略咨询报告.ppt

    麦肯锡—xx数码公司发展战略咨询报告.ppt

    FT-Prog-v3.12.38.643-FTD USB 工作模式设定及eprom读写

    FT_Prog_v3.12.38.643--FTD USB 工作模式设定及eprom读写

    基于sklearn实现线性回归模型对波士顿房价进行预测源码.zip

    基于sklearn实现线性回归模型对波士顿房价进行预测源码.zip

    pytest-3.5.0.tar.gz

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    pytest-4.5.0.tar.gz

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于相干衍射成像模拟的matlab源码.zip

    基于相干衍射成像模拟的matlab源码.zip

    基于CS的远程监控系统软件项目(免费提供全套java开源项目源码+论文)

    项目介绍 背景 在当今的数字化时代,远程监控系统已经成为企业和个人必不可少的工具。随着物联网(IoT)技术的发展,监控系统的需求不断增加,不仅仅局限于视频监控,还包括数据监控、设备状态监控等。基于CS(Client-Server)架构的远程监控系统应运而生,旨在提供高效、实时、可靠的监控服务,帮助用户实现远程管理和控制。 目的 基于CS的远程监控系统软件项目旨在为用户提供一个综合性的监控平台,通过该平台,用户可以实时监控各类设备和数据,实现远程控制和管理,提高工作效率,降低运营成本。同时,该系统还可以用于安全防护、生产过程监控等多种场景,具有广泛的应用前景。 模块说明 前端模块 前端模块是用户与系统交互的界面,负责展示监控数据和接收用户指令。前端模块的主要功能包括: 用户登录与认证:通过安全的登录机制,确保只有授权用户才能访问系统。 实时数据展示:以图表、仪表盘等形式展示实时监控数据,包括视频流、传感器数据等。 报警通知:当监控系统检测到异常情况时,前端模块会通过弹窗、声音等方式通知用户。 远程控制:用户可以通过前端界面对设备进行远程控制,例如开关设备、调整参数等。

    网课专注度监测预警系统基于yolov5目标检测的网课专注度检测系统源码+模型+pyqt5界面.zip

    网课专注度监测预警系统基于yolov5目标检测的网课专注度检测系统源码+模型+pyqt5界面.zip

    matlab基于标签歧义的深度标签分布学习.zip

    matlab基于标签歧义的深度标签分布学习.zip

    九型人格测试题.144题dr.xls

    九型人格测试题.144题dr.xls

    麦肯锡—xx科技业务流程改造报告.ppt

    麦肯锡—xx科技业务流程改造报告.ppt

    pytest-8.2.0-py3-none-any.whl

    文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    1-8.py

    1-8

Global site tag (gtag.js) - Google Analytics