- 浏览: 1406062 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (328)
- JSF (27)
- 生活 (12)
- Ajax (26)
- Maven (6)
- CSS (1)
- Shale (3)
- SiteMesh (1)
- Ext (15)
- JMX (2)
- Windows技巧 (7)
- 工作感悟 (18)
- SVN (2)
- SVG (0)
- GoogleGear (0)
- RAP (2)
- SOA与WebService (3)
- 笔记本技术研究 (1)
- Microsoft (2)
- 英语学习 (3)
- PHP (7)
- web 2.0 (6)
- 语义Web (1)
- IT史话 (3)
- iText (3)
- JVM (1)
- PropertiesEditor (1)
- J2SE (33)
- Spring (2)
- Java Batch (1)
- log (2)
- Struts2 (2)
- DWR (0)
- JAAS (3)
- EJB3 (4)
- Flex (8)
- JFreeChart (1)
- WAS (0)
- 数据库 (2)
- 摄影 (0)
- SQL (1)
- Google App Engine (1)
- linux (5)
- Eclipse plugin (10)
- Testing (0)
- Portal (0)
- 移动互联网 (0)
- SWTBot (1)
最新评论
-
江奇缘:
不错!!!!!!
web.xml里<filter-mapping>中的<dispatcher>作用 -
yy8093:
commonj 第三步,那个调用的方法要在哪里调?servle ...
JAVA中多种计时器的比较与分析 -
di1984HIT:
学习了,不错~
web.xml里<filter-mapping>中的<dispatcher>作用 -
penkee:
com.lowagie.text.DocumentExcept ...
iText中输出 中文 -
氵壞男亼乀:
我想请问下 你哪个html里面引入的几个js文件没看懂!你 ...
DWR入门教程之HelloWorld
今天看Ext的sample,不明白下面一段话:
Ext.fly(node.ui.elNode).ghost('l', { callback: node.remove, scope: node, duration: .4 });
主要是对Ext.fly不甚明了,于是搜了一把,发现收获还不小,与大家共享之。
Ext.fly是Ext.Element.flyweight的简写,是Ext的Element类中对享元模式的应用,因Element类中的方法都是对DOM对象的操作,而DOM操作又是Ext的核心,所以如果太过于频繁的创建DOM节点的话会造成性能的下降,因而采用享元模式,享元模式以共享的方式高效地支持大量的细粒度对象,有关享元模式的详细资料,可以参见http://fengzl.iteye.com/blog/117129的blog。
在Ext的wiki中对Flyweight有一个简短的介绍,即‘Use sharing to support large numbers of fine-grained objects efficiently. ’,有个哥们不懂,到论坛上发问,下面就是Ext的核心developer的回答:
Ext.Element wraps a lot of functionality around DOM element/node, for example functions like hide, show, all animation stuff, dimensions getting and setting function and a lot more.
Ext.Element keeps reference to DOM element it is wrapped around in dom property. Once you have an Ext.Element (e.g. you call Ext.get('some-id') it is an instance of Element class and you can work with it as such.
Now, imagine that you need to hide 1000 DOM nodes, you call 1000 times Ext.get('some-one-of-1000-id').hide() so you create 1000 instances of Element just to call one function: hide.
Ext.fly is one instance of Ext.Element with "replaceable" DOM node it is wrapped around. If you call 1000 times Ext.fly('some-one-of-1000-id').hide() you 1000 times replace dom property of one instance of Ext.Element.
Result: higher performance, lower memory usage.
You only need to keep in mind that you cannot keep Element returned by Ext.fly for later use as it's dom will sooner or later gets replaced by another one.
下面我们来看一下其实现(Ext.Element):
Ext.fly = El.fly; /** * Gets the globally shared flyweight Element, with the passed node as the active element. Do not store a reference to this element - * the dom node can be overwritten by other code. * @param {String/HTMLElement} el The dom node or id * @param {String} named (optional) Allows for creation of named reusable flyweights to * prevent conflicts (e.g. internally Ext uses "_internal") * @static * @return {Element} The shared Element object (or null if no matching element was found) */ El.fly = function(el, named){ named = named || '_global'; el = Ext.getDom(el); if(!el){ return null; } if(!El._flyweights[named]){ El._flyweights[named] = new El.Flyweight(); } El._flyweights[named].dom = el; return El._flyweights[named]; };
那么EI._flyweight又是什么呢?
El._flyweights = {}; var flyFn = function(){}; flyFn.prototype = El.prototype; var _cls = new flyFn(); // dom is optional El.Flyweight = function(dom){ this.dom = dom; }; El.Flyweight.prototype = _cls; El.Flyweight.prototype.isFlyweight = true;这样,基本上明白什么是Ext.fly了吧?同时,也应该明白Ext.fly和Ext.get的区别了吧?
评论
Element,不是来创建DOM的,这两个概念完全不同,DOM是浏览器自己的,Element是Ext的对象.
Element对象里面,有个属性dom,指向了实际存在于浏览器对象树里面的DOM元素,Ext用Element做中介,操作dom作很多操作,这里屏蔽了浏览器差异(起码这个是它的一个目标),也集成了许多的便利的函数,比如说getSize setSize child.
可以说,Element,就是Ext里面操作web元素的一个基本接口.
但是,有个问题是,每个Element都要和dom对应,也就是说,你如果要操作多少个web元素,就要有多少个Element对象实例.
那肯定是不行的.
flyweight,轻量级Element元素应运而生,它使得多个dom元素共享一个Flyweight对象(它完全继承了Element的方法),每次使用,都临时的修改dom属性,指向当前的web元素对象.
这样就节省了创建Element的开销.
个人理解,一家之言哈.
其实用静态方法可以避免这个问题,我感觉ext有点滥用享元模式,element中包含享元模式是合理的,但是在ext-lib等地方也调用这个方法就显得有点不地道了,只有对整个dom操作的逻辑了然于胸才明白这样调用产生的相互依赖不会造成冲突。
非常赞同。觉得有点滥用设计模式。
满瓶不晃,半瓶晃荡。自以为是
Element,不是来创建DOM的,这两个概念完全不同,DOM是浏览器自己的,Element是Ext的对象.
Element对象里面,有个属性dom,指向了实际存在于浏览器对象树里面的DOM元素,Ext用Element做中介,操作dom作很多操作,这里屏蔽了浏览器差异(起码这个是它的一个目标),也集成了许多的便利的函数,比如说getSize setSize child.
可以说,Element,就是Ext里面操作web元素的一个基本接口.
但是,有个问题是,每个Element都要和dom对应,也就是说,你如果要操作多少个web元素,就要有多少个Element对象实例.
那肯定是不行的.
flyweight,轻量级Element元素应运而生,它使得多个dom元素共享一个Flyweight对象(它完全继承了Element的方法),每次使用,都临时的修改dom属性,指向当前的web元素对象.
这样就节省了创建Element的开销.
个人理解,一家之言哈.
其实用静态方法可以避免这个问题,我感觉ext有点滥用享元模式,element中包含享元模式是合理的,但是在ext-lib等地方也调用这个方法就显得有点不地道了,只有对整个dom操作的逻辑了然于胸才明白这样调用产生的相互依赖不会造成冲突。
非常赞同。觉得有点滥用设计模式。
其实用静态方法可以避免这个问题,我感觉ext有点滥用享元模式,element中包含享元模式是合理的,但是在ext-lib等地方也调用这个方法就显得有点不地道了,只有对整个dom操作的逻辑了然于胸才明白这样调用产生的相互依赖不会造成冲突。
能把代码看到lib,是很不错了,但是,再多看多想,你就会发现,没什么不地道的。
Ext自己的代码中,使用了flyweight的地方,我看不出来有什么大不了,Ext.fly函数的第二个参数name,已经可以说明作者的意图了,如果乱用一气,引起错误,那能怎么说呢?
——只能说做出这个事情的人傻。
我在用fly的时候,个别地方需要特别指定name,都用公司的简称作前缀。
btw,最后一句话,我很不明白,Element在我看来,是Ext对于页面元素的一个包装类,就是避免一些dom操作的麻烦。怎么又说那些的话。
Element,不是来创建DOM的,这两个概念完全不同,DOM是浏览器自己的,Element是Ext的对象.
Element对象里面,有个属性dom,指向了实际存在于浏览器对象树里面的DOM元素,Ext用Element做中介,操作dom作很多操作,这里屏蔽了浏览器差异(起码这个是它的一个目标),也集成了许多的便利的函数,比如说getSize setSize child.
可以说,Element,就是Ext里面操作web元素的一个基本接口.
但是,有个问题是,每个Element都要和dom对应,也就是说,你如果要操作多少个web元素,就要有多少个Element对象实例.
那肯定是不行的.
flyweight,轻量级Element元素应运而生,它使得多个dom元素共享一个Flyweight对象(它完全继承了Element的方法),每次使用,都临时的修改dom属性,指向当前的web元素对象.
这样就节省了创建Element的开销.
个人理解,一家之言哈.
其实用静态方法可以避免这个问题,我感觉ext有点滥用享元模式,element中包含享元模式是合理的,但是在ext-lib等地方也调用这个方法就显得有点不地道了,只有对整个dom操作的逻辑了然于胸才明白这样调用产生的相互依赖不会造成冲突。
设计模式和 Ext JS
开发人员应该会喜欢 Ext JS 经过深思熟虑的设计和实现。它的面向对象设计模式反映了对象之间的关系和交互。据设计者说,开发 Ext JS 时使用的设计模式在很大程度上受到 Head First Design Patterns 这本书(Eric Freeman 等著,参见 参考资料)的影响。查看 Ext JS 源代码,就会发现创建模式(包括 singleton 设计模式)、结构模式(包括 flyweight 设计模式)和行为模式(包括 observer 模式)。
IBM developerWorks 中国 > Web development > 用 Ext JS 构建 Ajax 应用程序
Element,不是来创建DOM的,这两个概念完全不同,DOM是浏览器自己的,Element是Ext的对象.
Element对象里面,有个属性dom,指向了实际存在于浏览器对象树里面的DOM元素,Ext用Element做中介,操作dom作很多操作,这里屏蔽了浏览器差异(起码这个是它的一个目标),也集成了许多的便利的函数,比如说getSize setSize child.
可以说,Element,就是Ext里面操作web元素的一个基本接口.
但是,有个问题是,每个Element都要和dom对应,也就是说,你如果要操作多少个web元素,就要有多少个Element对象实例.
那肯定是不行的.
flyweight,轻量级Element元素应运而生,它使得多个dom元素共享一个Flyweight对象(它完全继承了Element的方法),每次使用,都临时的修改dom属性,指向当前的web元素对象.
这样就节省了创建Element的开销.
个人理解,一家之言哈.
发表评论
-
Ext-API详解--core/Ext.js
2009-05-08 14:43 23521、Ext.apply (Object obj, Objec ... -
Ext form提交的问题及解决
2008-10-22 00:44 3837近日做Ext的form提交,遇到一些问题,聊以志之。 ... -
Ext的日期格式说明
2008-10-17 15:24 2504Ext的日期格式说明,很实用的,如果大家遇到这方面的问题,可以 ... -
Ext学习之HelloWorld
2008-09-14 16:27 37211.首先,要下载ext,解压后,将其存放到WebRoot目录下 ... -
Ext继承关系 讲解
2008-09-12 15:50 4683Ext提供了这样的一个实用函数 Ext.extend (AP ... -
ECMAScript原始类型精讲
2008-05-12 10:17 1403为了更好的深入了解Java ... -
Ext Demo 汇总
2008-04-07 10:32 83201.Mail demo: http://www.demo.nb ... -
Eclipse中安装Spket插件
2008-04-01 14:29 12585Start Aptana and navigate the a ... -
Ext inheritance machnism
2008-03-13 11:37 1637Ext provides a utility function ... -
Ext中页面标签与组件的转化
2008-03-07 15:55 2073在ext中,页面上的标签如果编写合适,可以自动转化为Ext的组 ... -
使用Ext时需要注意的guideline
2007-12-10 15:49 15081.comments, Sure, your applicat ... -
A JavaScript Module Pattern
2007-12-08 12:10 1808Global variables are evil. Wit ... -
Ext中的Module模式
2007-12-08 12:02 2188在Ext中大量应用了Module pattern,对于新手而言 ... -
Ext中namespace的作用
2007-12-07 23:58 11683Ext中在每一个页面中添加一个namespace呢,就像下面的 ... -
临发布2.0前对ExtJS作者Jack Slocum的访谈
2007-10-15 14:48 1581在Ext下一个版本的预览 ...
相关推荐
- **Flyweight享元模式**:用于减少创建大量相似对象所需的内存消耗。在ExtJS中,`Ext.fly` 类便是一个典型的应用实例。 - **Template Method模板方法模式**:定义算法骨架,而将某些步骤延迟到子类中。在ExtJS中,`...
享元模式(Flyweight Design Pattern)在这里起到了关键作用,它允许高效地重复使用对象,而不会消耗大量内存。 3. **Ext.getDom**:这个函数直接根据ID或DOM节点获取DOM元素。例如,`Ext.getDom('elId')`用于通过...
注:享元模式(Flyweight Design Pattern)是一种节省内存的模式,该模式的大概原理是建立单个全体对象然后不断反复使用它。 3.Ext.getDom var elDom = Ext.getDom('elId'); // 依据id来查dom节点 var elDom1 = ...
内容概要:本文深入剖析了安川MP7系列工业控制系统的关键源码,重点介绍了运动轨迹规划、通信协议处理以及故障处理机制等方面的技术细节。通过对实际代码片段的解读,揭示了该系统在硬件寄存器直接访问、特殊功能码处理等方面的独特之处。同时,文中还分享了一些基于实践经验得出的重要参数设置及其背后的故事,如特定摩擦补偿系数的选择原因等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对安川产品有一定了解并希望深入了解其内部工作机制的专业人士。 使用场景及目标:帮助读者掌握安川MP7系列控制器的工作原理,提高对类似系统的维护能力和故障排查效率。对于想要进一步研究或二次开发该系统的开发者来说,也能提供宝贵的参考资料。 其他说明:文章不仅限于理论讲解,还包括了许多来自一线的实际案例和经验教训,使读者能够更好地理解和应用所学知识。
自动化测试与脚本开发_Python3_pynput_键盘鼠标操作录制执行代码生成工具_用于自动化测试_脚本录制_重复操作模拟_宏命令生成_提高工作效率_支持GUI界面_跨平台兼容_
嵌入式八股文面试题库资料知识宝典-深入分析Windows和Linux动态库应用异同.zip
嵌入式八股文面试题库资料知识宝典-C语言总结.zip
内容概要:本文详细探讨了风储直流微电网中母线电压控制的关键技术。首先介绍了风储直流微电网的背景和发展现状,强调了母线电压控制的重要性。接着阐述了永磁风机储能并网技术,解释了永磁风机如何通过直接驱动发电机将风能转化为电能,并确保与电网的同步性和稳定性。然后深入讨论了双闭环控制MPPT技术,这是一种通过内外两个闭环控制系统来实现实时调整发电机运行参数的技术,确保风机始终处于最大功率点附近。最后,文章探讨了储能控制母线电压平衡的方法,即通过储能系统的充放电操作来维持母线电压的稳定。结论部分指出,通过这些技术的有机结合,可以实现对风储直流微电网的有效管理和优化控制。 适合人群:从事新能源技术研发的专业人士、电气工程研究人员、风电系统工程师。 使用场景及目标:适用于希望深入了解风储直流微电网母线电压控制策略的研究人员和技术人员,旨在帮助他们掌握最新的控制技术和方法,以提高系统的稳定性和效率。 其他说明:文章还对未来风储直流微电网的发展进行了展望,指出了智能化和自动化的趋势,以及储能技术的进步对系统性能的影响。
嵌入式八股文面试题库资料知识宝典-C++object-oriented.zip
内容概要:文章详细介绍了HarmonyOS的目录结构及其重要性,从整体框架到核心目录的具体功能进行了全面剖析。HarmonyOS凭借其分布式架构和跨设备协同能力迅速崛起,成为全球操作系统领域的重要力量。文章首先概述了HarmonyOS的背景和发展现状,强调了目录结构对开发的重要性。接着,具体介绍了根目录文件、AppScope、entry和oh_modules等核心目录的功能和作用。例如,AppScope作为全局资源配置中心,存放应用级的配置文件和公共资源;entry目录是应用的核心入口,负责源代码和界面开发。此外,文章还对比了HarmonyOS与Android、iOS目录结构的异同,突出了HarmonyOS的独特优势。最后,通过旅游应用和电商应用的实际案例,展示了HarmonyOS目录结构在资源管理和代码组织方面的应用效果。; 适合人群:具备一定编程基础,尤其是对移动操作系统开发感兴趣的开发者,包括初学者和有一定经验的研发人员。; 使用场景及目标:①帮助开发者快速理解HarmonyOS的目录结构,提高开发效率;②为跨设备应用开发提供理论和技术支持;③通过实际案例学习资源管理和代码组织的最佳实践。; 其他说明:HarmonyOS的目录结构设计简洁明了,模块职责划分明确,有助于开发者更好地管理和组织代码和资源。随着万物互联时代的到来,HarmonyOS有望在开发便利性和生态建设方面取得更大进展,吸引更多开发者加入其生态系统。
内容概要:本文详细介绍了飞轮储能充放电控制的Simulink仿真模型,重点在于采用永磁同步电机的矢量控制和dq轴解耦控制策略。充电时,外环控制转速,内环控制dq轴电流;放电时,外环控制直流母线电压,内环同样控制dq轴电流。文中还讨论了硬件与软件环境的选择,以及仿真模型的调试与运行情况,最终得出该模型具有良好的跟随性能和波形完美度。 适用人群:从事电力电子系统、储能技术和Simulink仿真的研究人员和技术人员。 使用场景及目标:适用于需要对飞轮储能系统进行深入研究和仿真的场合,旨在提高充放电效率和稳定性,满足不同应用场景的需求。 其他说明:该仿真模型已调试完成,可以直接用于进一步的研究和实际应用,为未来的飞轮储能技术研发提供了有价值的参考。
嵌入式八股文面试题库资料知识宝典-北京瑞德方科技.zip
嵌入式八股文面试题库资料知识宝典-同方万维硬件测试工程师.zip
1_15套python PDF格式.zip
内容概要:本文详细介绍了三相三电平整流器的仿真过程及其性能分析。文中首先概述了三相三电平整流器的基本概念及其在电力系统中的重要作用,接着重点探讨了电压电流双闭环控制方式的工作原理和优势,以及SPWM调制技术的具体应用。通过仿真文件展示了整流器在不同条件下的响应情况,验证了这两种技术的有效性和优越性。最后,作者表达了对未来实际应用的期望。 适合人群:从事电力电子研究的技术人员、高校相关专业师生、对电力控制系统感兴趣的工程爱好者。 使用场景及目标:适用于希望深入了解三相三电平整流器工作原理和技术细节的研究人员;目标是在理论基础上掌握电压电流双闭环控制和SPWM调制的实际应用方法。 其他说明:本文提供的仅为仿真文件,未涉及实物实验数据。
嵌入式八股文面试题库资料知识宝典-恒光科技.zip
嵌入式八股文面试题库资料知识宝典-北京天华威视科技有限公司面试题.zip
嵌入式八股文面试题库资料知识宝典-微软研究院笔试题目的答案.zip
Arduino UART实验例程,开发板:正点原子EPS32S3,本人主页有详细实验说明可供参考。