怎么能提高extJS代码的执行速度
2个回答
展开全部
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
Java代码
01 function $ImportJs(viewName,callback) {
02 var b = document.getElementById(viewName+'-hiden');
03 if (b != null) {
04 var view = eval('new ' + viewName + '()');
05 callback.call(this, view);
06 } else {
07 var jsArr = eval('App.importJs.' + viewName);
08 if(jsArr==undefined){
09 var view = eval('new ' + viewName + '()');
10 callback.call(this, view);
11 return ;
12 }
13 ScriptMgr.load({
14 scripts : jsArr,
15 callback : function() {
16
17 Ext.DomHelper.append(document.body,"<div id='"
18 + viewName
19 + "-hiden' style='display:none'></div>");
20 var view = eval('new ' + viewName + '()');
21 callback.call(this, view);
22 }
23 });
24 }
二.用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添加指令
代码如下:
Java代码
01 package com.htsoft.core.web.filter;
02 import java.io.IOException;
03 import java.util.HashMap;
04 import java.util.Iterator;
05 import java.util.Map;
06 import javax.servlet.Filter;
07 import javax.servlet.FilterChain;
08 import javax.servlet.FilterConfig;
09 import javax.servlet.ServletException;
10 import javax.servlet.ServletRequest;
11 import javax.servlet.ServletResponse;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14
15 public class GzipJsFilter implements Filter {
16 Map headers = new HashMap();
17 public void destroy() {
18 }
19 public void doFilter(ServletRequest req, ServletResponse res,
20 FilterChain chain) throws IOException, ServletException {
21 if(req instanceof HttpServletRequest) {
22 doFilter((HttpServletRequest)req, (HttpServletResponse)res, chain);
23 }else {
24 chain.doFilter(req, res);
25 }
26 }
27 public void doFilter(HttpServletRequest request,
28 HttpServletResponse response, FilterChain chain)
29 throws IOException, ServletException {
30 request.setCharacterEncoding("UTF-8");
31 for(Iterator it = headers.entrySet().iterator();it.hasNext();) {
32 Map.Entry entry = (Map.Entry)it.next();
33 response.addHeader((String)entry.getKey(),(String)entry.getValue());
34 }
35 chain.doFilter(request, response);
36 }
37
38 public void init(FilterConfig config) throws ServletException {
39 String headersStr = config.getInitParameter("headers");
40 String[] headers = headersStr.split(",");
41 for(int i = 0; i < headers.length; i++) {
42 String[] temp = headers[i].split("=");
43 this.headers.put(temp[0].trim(), temp[1].trim());
44 }
45 }
46 }
3.在WEB.xml 文件中,添加以下配置:
Java代码
01 <filter>
02 <filter-name>GzipJsFilter</filter-name>
03 <filter-class>com.htsoft.core.web.filter.GzipJsFilter</filter-class>
04 <init-param>
05 <param-name>headers</param-name>
06 <param-value>Content-Encoding=gzip</param-value>
07 </init-param>
08 </filter>
09 <filter-mapping>
10 <filter-name>GzipJsFilter</filter-name>
11 <url-pattern>*.gzjs</url-pattern>
12 lt;/filter-mapping>
13 <servlet-mapping>
4.在index.jsp中引入该压缩文件:
<script type="text/javascript" src="<%=request.getContextPath()%>/ext3/ext-all.gzjs"></script>
大家可以看到以上,这块是在外网使用的,其速度是比较快的。当然,浏览器解压这个文件需要一点时间,不过在本地解压是非常快的,可以不用管。虽说不能完全解决其速度问题,但是还是能有所帮助。
我们可以从以下几种方法来提高应用程序的运行速度:
一.前期尽量少加载js.
这点在Joffice中有比较好的运用,采用的是由ScriptMgr.load方法来完成,加载完成后,其会在body中插入一个div,只要当前页面不被刷新,下次再访问该功能时,不需要再加载js
Java代码
01 function $ImportJs(viewName,callback) {
02 var b = document.getElementById(viewName+'-hiden');
03 if (b != null) {
04 var view = eval('new ' + viewName + '()');
05 callback.call(this, view);
06 } else {
07 var jsArr = eval('App.importJs.' + viewName);
08 if(jsArr==undefined){
09 var view = eval('new ' + viewName + '()');
10 callback.call(this, view);
11 return ;
12 }
13 ScriptMgr.load({
14 scripts : jsArr,
15 callback : function() {
16
17 Ext.DomHelper.append(document.body,"<div id='"
18 + viewName
19 + "-hiden' style='display:none'></div>");
20 var view = eval('new ' + viewName + '()');
21 callback.call(this, view);
22 }
23 });
24 }
二.用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添加指令
代码如下:
Java代码
01 package com.htsoft.core.web.filter;
02 import java.io.IOException;
03 import java.util.HashMap;
04 import java.util.Iterator;
05 import java.util.Map;
06 import javax.servlet.Filter;
07 import javax.servlet.FilterChain;
08 import javax.servlet.FilterConfig;
09 import javax.servlet.ServletException;
10 import javax.servlet.ServletRequest;
11 import javax.servlet.ServletResponse;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14
15 public class GzipJsFilter implements Filter {
16 Map headers = new HashMap();
17 public void destroy() {
18 }
19 public void doFilter(ServletRequest req, ServletResponse res,
20 FilterChain chain) throws IOException, ServletException {
21 if(req instanceof HttpServletRequest) {
22 doFilter((HttpServletRequest)req, (HttpServletResponse)res, chain);
23 }else {
24 chain.doFilter(req, res);
25 }
26 }
27 public void doFilter(HttpServletRequest request,
28 HttpServletResponse response, FilterChain chain)
29 throws IOException, ServletException {
30 request.setCharacterEncoding("UTF-8");
31 for(Iterator it = headers.entrySet().iterator();it.hasNext();) {
32 Map.Entry entry = (Map.Entry)it.next();
33 response.addHeader((String)entry.getKey(),(String)entry.getValue());
34 }
35 chain.doFilter(request, response);
36 }
37
38 public void init(FilterConfig config) throws ServletException {
39 String headersStr = config.getInitParameter("headers");
40 String[] headers = headersStr.split(",");
41 for(int i = 0; i < headers.length; i++) {
42 String[] temp = headers[i].split("=");
43 this.headers.put(temp[0].trim(), temp[1].trim());
44 }
45 }
46 }
3.在WEB.xml 文件中,添加以下配置:
Java代码
01 <filter>
02 <filter-name>GzipJsFilter</filter-name>
03 <filter-class>com.htsoft.core.web.filter.GzipJsFilter</filter-class>
04 <init-param>
05 <param-name>headers</param-name>
06 <param-value>Content-Encoding=gzip</param-value>
07 </init-param>
08 </filter>
09 <filter-mapping>
10 <filter-name>GzipJsFilter</filter-name>
11 <url-pattern>*.gzjs</url-pattern>
12 lt;/filter-mapping>
13 <servlet-mapping>
4.在index.jsp中引入该压缩文件:
<script type="text/javascript" src="<%=request.getContextPath()%>/ext3/ext-all.gzjs"></script>
大家可以看到以上,这块是在外网使用的,其速度是比较快的。当然,浏览器解压这个文件需要一点时间,不过在本地解压是非常快的,可以不用管。虽说不能完全解决其速度问题,但是还是能有所帮助。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询