论坛首页 Web前端技术论坛

解决ExtJS性能的方法!请不要赖ExtJS!

浏览 21615 次
精华帖 (2) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (9)
作者 正文
   发表时间:2011-11-26  
内网系统使用EXT是不应该慢,慢只能说明是EXT没有用好!解决EXT慢可以通过如下途径:
1. 不使用EXT4.0.X,目前EXT4.0的性能是比较差的,建议使用Ext3.4
2. 尽可能说服客户不使用IE,可以用chrome和firefox代替(这不是主要原因)
3. 对ext.all.js文件一定要压缩,可以使用gzip压缩,能把原来的近800K压缩到140多K,这对速度的提高很明显!
4. 不能使用iframe的结构,不然每个iframe里面的Ext都会重新加载和初始化一次,也是慢的原因,可以使用模块化, 
   自定义类的方式
5. 对模块要进行动态加载,只有当第一次使用到对应模块时才去加载使用到的类,然后再eval成对象即可,动态加载           非常有必要,详细技术可以看我的项目或者网上找
6. 如果对一些页面元素比较多的模块,可以使用延时初始化的方式,即:打开一个模块,然后显示一个loading,再将 复杂的元素动态加载上,如:
initComponent: function() {
var contentPanel = this.contentPanel = new Ext.Panel({
html: 'loading...'
});
Ext.apply(this, {
            autoScroll: false, 
        closable: true,
            layout: 'border',
        items:[contentPanel]
        });
....
},

...
initContentPanel: function(data) {
//在该方法中加载初始化你的面板
}
...

//该类的初始化方法
initMethod: function(data) {
var task = new Ext.util.DelayedTask(function(){
    this.initContentPanel(data);
}, this);
task.delay(200);
}
这样对加载元素较多较复杂的面板是很有用的!
7. 一些公用的组件可以在index.html页面上就加载,以后用到时就可以直接使用, 如:
<div>
<script type="text/javascript" src="ExtJS/adapter/ext/ext-base.js.gzipfile"></script>
<script type="text/javascript" src="ExtJS/ext-all.js.gzipfile"></script>
<script type="text/javascript" src="ExtJS/src/locale/ext-lang-zh_CN.js"></script>
<script type="text/javascript" src="其它公用组件"></script>
</div>

8. 是最关键的,要优化自己的系统,加载大数据量grid时一定要有分页,grid加载100行数据和加载25行数据是速度是有明显的区别的,能重用的store就重用,一次请求就一次请求,不要分多次请求,优化自己的SQL....这些就不用说了,

EXTJS系统慢,那就是你的系统问题,不要赖ExtJS!谢谢!

大体就这么多吧!希望对大家有用!
 
   发表时间:2011-11-28  
哥们第五点不太明白。能举个详细的例子,或者贴上代码看看嘛
0 请登录后投票
   发表时间:2011-11-28  
我也是 第五点 有疑问 楼主能提供个详细例子吗
0 请登录后投票
   发表时间:2011-11-28  
第一点不理解,哪的数据说明4比3性能差
0 请登录后投票
   发表时间:2011-11-28  
第五点不明白的可以看:
http://www.iteye.com/topic/1114534

总体来说就是在你的APP中定义一个
1. this.cachedModuls = [];

然后用到需要的JS时:
2. Ext.Ajax.request({  
    url: jsFilePath,
    params: {file: js},
    success: JSLoader._onLoadJs,
    method: 'GET',
    scope: callback
});
3. 加载成功后:
   eval(response.responseText);

4. 以后用到相关类时先到cachedModuls中找

0 请登录后投票
   发表时间:2011-11-28  
waitingmyself 写道
第一点不理解,哪的数据说明4比3性能差



你可以到官网相关说明中看!!我这要下班了,回去再给你找!
0 请登录后投票
   发表时间:2011-11-28  
据说Ext4中的grid重写过,性能牛逼了点
0 请登录后投票
   发表时间:2011-11-28  
“4. 不能使用iframe的结构,不然每个iframe里面的Ext都会重新加载和初始化一次,也是慢的原因,可以使用模块化”
0 请登录后投票
   发表时间:2011-11-28  
第8点可以再扩充一下:
重要的是交互设计,OPOA与传统后台生成完整html的交互模式有很大不同

传统网页显示一次服务器开销比较大,一般都是尽量显示较多的数据,浏览器也会有滚动条。相当于一次给你够多的选择,让你在尽可能少的步骤中达成目的。

OPOA页面因为交互成本降低,而界面效率受内容多少影响比较大,要尽量避免滚动条,偏向于引导式操作。它只显示当前有用的数据,细致引导你的操作,每步操作都可以很快响应,让你达成目的的路径非常精准,不会受到太多多余数据干扰。

或者可以用复杂指令集与精简指令集来类比?



以上是大致的思想,举几个例子来体现它:
1. 当一个表单内容超过一页时,拆分成子窗口或分Tab页,这样一次渲染的组件少,速度也会快。
2. Grid分页LZ已经说过了,另外有个BufferView应该很多人都知道,其实它也有这种理念,它只渲染用户看到的部分,通过滚动条交互来动态修改内容。

一个好的OPOA应该不会同时显示过多组件,也很少会有滚动条,尤其是全局滚动条。
0 请登录后投票
   发表时间:2011-11-28  
clue


说的很有道理!!

重在设计!

原理就是那么多,以最简、最快、最小的代码实现最稳定的功能,最新最流行的技术不一定适合你的需求!
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics