论坛首页 Web前端技术论坛

[原创]总结三年使用Extjs开发One Page One Application的SSH架构经验

浏览 31518 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-04-06  
最近在关注extjs4. 飞跃
0 请登录后投票
   发表时间:2011-04-06  
EldonReturn 写道
> 我们基本上已经解决了IE的内存释放问题,过程很痛苦,很难表述清楚。
> 各主要页面的数据刷新、打开再关闭,已无Dom节点泄漏,内存基本无增长

定义一个_Widget父类,里面设个destroy,然widget在被主动销毁的时候释放全部资源。是这么做的么?

Ext本身就有考虑资源释放,只是做得不太完善罢了。

资源未释放的根源是对象仍有可访问的引用及JS <-> Dom循环引用。
自3.1以后,JS <-> Dom的循环引用基本已经没有了,每个组件调用destroy时都会将它创建的Dom节点一并销毁。

我们主要做的就是找出导致资源未释放的引用,然后在销毁方法中改进它。

例如Panel在未render时就销毁,未一并销毁它所创建的tbar组件。而Ext中所有组件(Component)都在Ext.ComponentMgr中注册,导致tbar组件不会被释放。

再例如,Function#createInterceptor方法,会将原方法及最近一次调用的scope存于注入函数上(fcn.target = me;fcn.method = method;),如果有某个组件扩展方法用到了它,那么这个方法会缓存最后一次调用的组件,导致它因引用而未释放。

当然,除以上两种外,IE还有特例的,好像IE8及以前版本,都无法释放form节点。而IE8中甚至A, IMG, INPUT等节点都是创建后就无法释放(用sIEve验证)
(参考:Memory Leaks in IE8

对于OPOA来说,这些引用导致的未释放会很严重,因为组件间的引用会把它们交织在一起,一旦一处没处理好,一大片组件即使已经destroy但JS对象仍因引用而继续保留,积少成多最终不可收抬。

另,以前发过一篇总结,可以参考下: http://clue.iteye.com/blog/704883
0 请登录后投票
   发表时间:2011-04-06  
OPOA可以用ExtCore+Extbase,大小gzip完我记得是几十K,然后用Ext4的动态加载。
OPOA登录时先用HTML给用户显示一个首页和输入用户名密码的地方,同时在后台加载ExtCore+Extbase那几十K的包,一般来说用户输入完成后基本上加载完毕。
多用305头效果会好一些,实在不行把JS都压缩后放在nginx上,速度也很快。
0 请登录后投票
   发表时间:2011-04-06   最后修改:2011-04-06
skzr.org 写道
希望楼主一直走下去,这样可以让投资得到持续的回报。
重新学习yui,你会一样的面临各种问题的,这个时候还是会重复走以前的路——yui看来也有问题,最后我们还是自己开发一套,结果几年后发现自己做出来的和当时的yui差不多,而且还有一堆遗留的设计和bug需要维护。

老实说,extjs很好很强大,如果做ria最终它们的ui设计(component、layout、等等)都是一样的。

现在自己也是选择了ExtJS做东西,把所有的东西封装为组件。
回报还是很不错的,降低了重复劳动。现在想在哪儿用就可以用。结构也清晰了。



    主要是因为工作关系,所以开始接触YUI,也不想放弃Extjs,但三年了,一个人走Extjs的路,挺孤单的,如果多一两个人一起研究和进步,估计也就一年不到就可以做的很好,像二楼的意见。

    当然,一个系统架构不能只考虑前端展现,后台的业务逻辑处理和开发效率也是重要考虑之一,extjs再强大,没有像Direct的后台支援,也就是一个漂亮的花瓶,所以前后台的结构设计,降低重复劳动,都要认真考虑。

    回报已经不错了,起码提高了对架构的设计理念和团队开发的建设,这都是宝贵的经验。
0 请登录后投票
   发表时间:2011-04-06  
tianzhou0374 写道
OPOA可以用ExtCore+Extbase,大小gzip完我记得是几十K,然后用Ext4的动态加载。
OPOA登录时先用HTML给用户显示一个首页和输入用户名密码的地方,同时在后台加载ExtCore+Extbase那几十K的包,一般来说用户输入完成后基本上加载完毕。
多用305头效果会好一些,实在不行把JS都压缩后放在nginx上,速度也很快。


    ExtCore+Extbase的架构设计不错,只要完美解决ie内存问题,应该是Extjs将来的发展方向。
    其实不一定把框框限死在OPOA,我设计的架构也是支持iframe的,只是OPOA优点也很突出,所以几乎没怎么用iframe.
0 请登录后投票
   发表时间:2011-04-06  
同感
Ext的学习成本确实有点高,Ext内部的一些机制设置,有时让人很抓狂
理解新手写的Ext代码,头疼。。。。
0 请登录后投票
   发表时间:2011-04-06  
IE下性能的问题可以考虑chromeframe
http://code.google.com/chrome/chromeframe/
可以在页面上提示用户安装,可以解决一部分问题,但毕竟选择权还是在用户。

象楼主这类application另可以考虑用gwt版的 gxt.
http://www.sencha.com/products/extgwt/
刚开始可能觉得开发速度不如js,但是随着开发的深入需求的变化,越来越能体会到java的好处。
js这样的语言很难做大型的设计。
0 请登录后投票
   发表时间:2011-04-06   最后修改:2011-04-06
其实这种结构同c/s分布式程序没有区别

但如果用delphi+dataabstract这样的分布式框架,或是windows forms+wcf ,开发效率提高的可不是几倍,而且现在c/s的程序更新分发用自动更新或是潜入语言,已经同b/s没有区别了,人类总是为形式所累
0 请登录后投票
   发表时间:2011-04-06  
racke 写道
IE下性能的问题可以考虑chromeframe
http://code.google.com/chrome/chromeframe/
可以在页面上提示用户安装,可以解决一部分问题,但毕竟选择权还是在用户。

象楼主这类application另可以考虑用gwt版的 gxt.
http://www.sencha.com/products/extgwt/
刚开始可能觉得开发速度不如js,但是随着开发的深入需求的变化,越来越能体会到java的好处。
js这样的语言很难做大型的设计。


GXT用的是后处理模式,性能不如js的,优点是方便调试而已。
js这样的语言很难做大型的设计?笑而不语
0 请登录后投票
   发表时间:2011-04-06  
jjx 写道
其实这种结构同c/s分布式程序没有区别

但如果用delphi+dataabstract这样的分布式框架,或是windows forms+wcf ,开发效率提高的可不是几倍,而且现在c/s的程序更新分发用自动更新或是潜入语言,已经同b/s没有区别了,人类总是为形式所累


我以前也是delphi出身,其实B/S再怎么强开发效率都不如C/S吧,为什么搞B/S,推B/S,就是为了好忽悠老板呀,混口饭吃而已,extjs的控件设计模式很像delphi,学delphi的时候没学会写控件,所以现在用extjs写控件,呵呵。
0 请登录后投票
论坛首页 Web前端技术版

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