技术门诊是51CTO社区品牌栏目,每周邀请一位客座专家,为广大技术网友解答疑问。从热门技术到前沿知识,从技术答疑到职业规划。每期一个主题,站在最新最热的技术前沿为你引航!
本期特邀《Ext 江湖》一书作者章小飞老师 ,针对Ext 核心架构的困惑给予解答,欢迎网友积极提问,与专家一起讨论!
![【236期门诊集锦】戏说 Ext 江湖_休闲](https://s2.51cto.com/attachment/201202/154117348.jpg?x-oss-process=image/resize,m_fixed,w_1184)
查看本期门诊精彩实录:http://doctor.51cto.com/develop-250.html
参与最新技术门诊:http://doctor.51cto.com/develop-251.html
精选本期网友提问与专家解答,以供网友学习参考。
Q:漠漠,你好,最近在用extjs4做项目,碰到一下一些问题:
1)extjs4 如何提供在ie中的性能,经常运行运行ie的内存就吃到500-600M了
2)问1个技术细节问题:
2.1 在extjs中做一个comboxgrid,通过继承picker组件,在弹出的gridpanel中,其中又包含一个combox,当选择gridpanel中的combox会造成,这个弹出全部关闭这个如何解决?
A: 之前一直用2.2和3.2做项目,因为Ext4也是刚出来不久,所以研究的时间不长。所以以下观点如有偏差还请见谅。
1)性能问题,根据目前的大量讨论,貌似性能问题集中在IE6上面。
2)这个扩展问题真心比较麻烦,可以模仿下拉树ComboTree去做,处理一下相关的事件,更详尽的代码可到咱的扣扣群讨论。
Q:Ext相对于其他JS框架如JQuery,Yahoo等有那些优势所在,还有Ext好像是收费的,而现在很多企业都愿意使用免费的框架,怎么能吸引用户使用它?
很不幸的是,架构过大也成为了Ext的缺点:学习成本高,对JavaScript基础要求高。这些就需要对照具体的项目去仔细选择了。
对于收费的问题,因为这里是中国,我不多说,你别多想,大家都懂的。
再者,如果实在不行,上ext-core
Q:学习Ext 除了学习UI设计之外,还需要掌握哪些方面的东西?请momo回答下...
A: Ext的UI组件实际上只是框架的冰山一角。
UI背后那一套基础设施和机制是我们重点盯防的对象。
比如这些:
第一大机制是:封装底层HTML/CSS,屏蔽浏览器差异:Element、DomHelper、DomQuery;
第二大机制是对基础数据结构的扩展:MixedCollection、Store;
第三大机制是事件机制:EventManager、EventObject、Observable;
第四是Ajax;
第五是OO;
第六是UI:Panel、Window、TabPanel、GridPanel、FormPanel、TreePanel;
第七是模板Template;
第八是Layout;
第九是Animation;
第十是Chart&Report。
把以上十大机制都搞通就可以说已经精通了Ext。
Q:看过一点ExtJs,感觉代码写起来量还是比较大。不知道你对其它JS框架是否了解,能否对各自的优劣做个比较。另外,也把Flex算在内说说?
A:多谢。
我是从很远古的prototype开始学js的,玩过一点JQuery。
个人的理解是这样的,类似prototype和JQuery这类的框架,自身的定位是工具级,没有能够形成很大的系统。(可对照feng345fengcool童鞋上面的问题)。比如JQuery,用多一点就会发现,好多的基础设施,比如数据结构方面的支撑,还是要自己去写。
对于Flex因为跟我目前的工作关联很深,不作过多评价,个人比较习惯直接上AS3代码来做,而对于Flex提供的组件不太看好(09年开始做Flex相关的东西,一直到现在)。
Q:我最近也开始尝试ext做了一个小的web项目,第一次使用ext做项目毕竟经验不足,遇到很多问题,请问对于初学者,要掌握那些基本技能?在开发中应注意什么?开发思路和JAVA开发有何不同?
A:注意对JavaScript基础知识的补充,Ext开发包examples文件夹下面有不少好例子,有些代码直接可以抄过来用。
至于注意点,这个问题范围比较广。但是有一点心里一定要有谱,那就是,js是脚本语言,虽然Ext在封装的时候基本上遵守了Java的代码规范,但是我们在编码的时候要发挥出脚本语言的威力,不要被Java这种强类型语言把思维束缚住。
Q:老师你好,一直想用EXT开发,感觉它很炫,有的人说性能不好,我想问两点:
1.EXTJS与Jquery的优缺点是什么?
2.EXTJS如果用到商业是收费的吧?收费标准是什么?它适合做访问当高的系统吗?
A:不用客气,叫我大漠就可以。Ext的界面确实很炫,但是这只是Ext的冰山一角,参见第五楼的相关内容。别人怎么说不重要,重要的是自己要去实际做一下,自己动手最重要。
1、这个问题比较大,我打个比方吧,如果说JQuery是linux,那么Ext就是Windows;linux开源免费,各种版本,各种插件,而且只要开发者功力深,可以做得非常好。而Ext封装是很紧密的,就像windows,需要开发者功力深厚,比较要花比较长的时间才能理解它。然而,只要深入理解了其中的任何一个版本,好多东西就可以融会贯通了。这一点跟windows编程也是非常类似的,比如win32汇编,只要会了,可以一直搞下去,就那么回事了。
2、收费问题参考官方相关说明:http://www.sencha.com/
Q:1. 对于使用Extjs来做大型的企业应用,如何做好前端的优化工作,希望能从各个方面介绍(例:前端整体设计、个别控件优化等)
2. 如果要做细粒度的前端控件的权限控制,那么有没有什么好的方案(这里的权限控制指的是细化到某一指定控件如“按钮” 在不同的业务环境下的访问状态)
A:1、这么大的问题你这是要我命吗?回头咱私下聊去。
2、这是权限系统的设计问题,就看你们具体想做到什么程度了,细粒度的权限设计需要的代码量很大的,这个你懂的。
Q:章老师:你好!
我知道Ext是一个强大的js类库,以前是基于YAHOO-UI,现在已经完全独立了,主要包括data,widget,form,grid,dd,menu,其中最强大的应该算grid了,编程思想是基于面向对象编程(oop),扩展性相当的好.可以自己写扩展.自己定义命名空间.它提供了丰富的,非常漂亮的外观体验,成为众多界面层开发人员的追捧!其核心的组件基本覆盖了我们构建富客户端的常用的组件。
我想请问的是,Ext对于企业应用系统,尤其是MIS类型的系统而言,是不是非常适用?谢谢解答!
A:你好。
你说得非常正确,看来你对Ext有比较深的研究。
对于MIS系统,个人理解是这样的,不一定整体上全部用Ext,但是像Tree、Grid,以及一些Form校验等等控件可以局部去使用。
Q:漠漠,求教Ext的核心架构和机制都有一些什么内容呢?源码确实很难坚持看下去,请问有好的方法吗?
A:看源码很辛苦的,如果心里有一个大的框架,然后再去看源码的话,会轻松很多。就好比做项目的时候要先设计,然后去编码。
可以到这里来下载我自己读源码的时候画的一些时序图和类结构图:damoqiongqiu.iteye.com
Q:相信很多人在初次用到Ext的时候,都感觉不怎么顺手,特别是做.Net开发,微软封装好了很多东西,几乎不费吹灰之力就可以搞定一个UI界面。
想知道的是,怎样更好的利用Ext,在开发时间内给一个充满美的交互界面??
A:对于各种技术,向来就有所谓“学习曲线”的说法,Ext确实对js基础的要求比较高,需要的学习时间比较长。但是一点掌握了之后,几乎可以融汇贯通所有js框架。
这就好比有些是短期的投资,有些是长期投资,如何去抉择,要根据公司的实力和个人的情况去仔细决策。
界面问题,Ext的UI组件是CSS紧密封装的,使用皮肤机制可以定制出自己的风格。另外,好多项目可以不必全部使用Ext,比如仅仅在某些展示数据的地方用上Ext的GridPanel,而其它部分可以采用传统的界面设计,让美工帮忙,做出好看的效果。
Q:小弟 问问ext内存优化的问题 比方常见右侧新增tab页 然后关闭 关闭一个页面后 之前所消耗的内存并没有彻底释放 请您说说这个问题都是怎么解决的? 谢谢
A: Ext对TabPanel采用了延迟渲染技术,比如一共有10个Tab页,第一次的时候只会创建第一个,后面的Tab页只有你点击激活之后才会渲染。
另外还采用了缓存技术,当你关闭Tab页的时候,并不会真正销毁,而是隐藏起来了,等你下次再用的时候就不需要重新创建。对于那些使用频率非常高的Tab,这一点很有效。
以上两点都是可配置的,参见TabPanel的API文档。
另外,关于关于内存释放和效率优化是一个比较大的主题,这里不能一次说完。后面有时间我会发一些文章。
Q:Ext在手机上的应用如何?
A:有Ext-touch,参见这里http://www.sencha.com
补充:JQuery也有touche版本。
另外,据搞这一方面的朋友的评论,安卓机上面的运行效率不是很好,但是IOS平台上非常好,几乎与原生的APP一样。
具体你可以用安卓模拟器自己去跑一把。
Q:
《Ext江湖》是针对Ext哪个版本的,现在最新的版本貌似是ext-4.1.0-beta-2,我从4.0就开始用,bug不是一般的多,而且每次更换版本,指的是小版本,之前的代码总有些不能用,要改。我想知道的是,您这本书对Ext4开发帮助大不大,我英文不是很好,现在市面上中文文档很少。
A:这本书的源码分析针对Ext3.2,因为那个时候Ext4还没有出来。
Ext3.x算是一个比较稳定的版本,如果需要2.x和3.x的文档,可以到我的blog下载:damoqiongqiu.iteye.com
无论框架如何封装,最底层的原理是一样的,因此,个人以为,只要把功底弄扎实,随便它怎么变去,就算升级到10.0,我们一样能很快就上手,对吧?
另外,根据大量反馈,Ext4目前确实存在比较多的问题。
Q:您好,我想问下Ext2.2中的viewport 如何实现高宽度自适应的?
看了源码有点云里雾里的,不清楚Ext是个怎么实现的流程。能否讲解下?
A:ViewPort实际上使用了一个BorderLayout
Ext的UI组件借用了Swing的大量设计,包括其中的Layout机制
Ext提供的布局管理器基上和Java中的Swing一致
如果需要知道UI组件内部详细的运作机制
到这里参见相关的内容:damoqiongqiu.iteye.com