帖子发了好几天,可惜么人回
好在经过几天的努力,发现这个问题也没那么困难。
目前修改了一些Ext组件,使用sIEve检查发现除form节点外,其它的都可以正常释放掉。
(form节点无法释放好像是IE自身的特性)
不过只是想要个是否可行的答案罢了,现在看来貌似是可行的。
自己做的补丁帖在3楼
由于是做非常简单的可行性测试,所以只有部分标准UI组件的修正,有兴趣的可以回帖交流。
---2009-9-14
-----------------------------传说中的分割线---------------------------------------
最近准备使用Ext3.0.0开发一个one page one application的网站
预先做了一个测试页面,使用动态加载JS,多Tab切换,无iframe。
界面效率问题不用说了,一直就那样,还勉强可以接受。
但在IE下测试内存占用的时候,发现问题真的很严重。
一个新Tab页面,里面有两Tab,每Tab里有Tree、Grid、Chart、Form面板各一个
每多开一个Tab页,内存占用上升9M左右。关闭Tab页释放的内存也极少
开始以为IE本身特性就是这样(不立即释放内存)
但测试开了20来个Tab页,性能下降了一倍左右,内存占用近200M,关闭Tab页也没有释放几M。
于是使用sIEve来检测,发现每开关一个Tab页,都会出现近100来个孤立(Orphan)Dom节点无法释放。
在开关20来次后,总Dom节点达到了近5K的水平
Dom节点无法释放,肯定是有引用它们的JS对象,这些对象也属于无用数据,应当被清除掉才对。
后来上网查找资料,发现Ext2.2有人写过一个补丁,也是做opoa时发现问题并手工修正的:
http://www.extjs.com/forum/showthread.php?t=45782
这个帖的作者是中国人: Location: nanning, china
不过我们要用到Ext3.0的一些新功能,所以不会考虑Ext2.2
并且他好像很久没上过线,也没有其它联系方式可以交流,真的很可惜。
实在查不到可用的解决方案只好自己尝试:
查找各组件的destroy方法,看它是否完全销毁了各种引用
换句话说,看它是否将自己创建的已经无用的对象销毁,是否将自身与其它任何dom节点、组件切断关系。
没有的话就给它打补丁。
接触Ext也没多久,忙了好几天,只修改了几个组件,并且还不知道有没有其它问题。
例如Ext.Panel组件的修改:
Ext.override(Ext.Panel,{
onDestroy : function(){
Ext.destroy(
this.header,
this.tbar,
this.bbar,
this.footer,
this.body,
this.bwrap,
this.dd
);
delete this.header;
delete this.tbar;
delete this.bbar;
delete this.footer;
delete this.body;
delete this.bwrap;
delete this.dd;
Ext.Panel.superclass.onDestroy.call(this);
}
});
注:原beforeDestroy没有考虑this.dd的销毁,没有彻底清除dom节点,没有最后delete解引用
开始是直接修改beforeDestroy方法的,但发现删除顺序有些问题,造成继承它的一些组件destroy时出错
所以新建了onDestroy方法
这些属性都是在Panel这一层定义的,销毁也应该在这一层进行。
以上示例测试过,发现所有节点都能释放。
另外还尝试过修改Ext.dd、Ext.ux.Portal的释放
由于水平不足,对自己的修改很没信心,就先不帖出来了。
希望这帖子能起到抛砖引玉的作用,大家一起讨论解决方法
(有点私心的说
)
分享到:
- 2009-09-11 11:12
- 浏览 3046
- 评论(7)
- 论坛回复 / 浏览 (5 / 5912)
- 查看更多
相关推荐
这篇文章主要探讨了如何利用Ext框架设计和实现一个单页系统(One Page Application,OPOA),这是一种优化用户体验的Web应用模式,旨在提高响应速度和用户交互性。文章首先介绍了Ext和单页系统的概念。 **1. Ext...
mat-opoa Installation npm install --save-dev mat-opoa Usage var mat = require('mat'); var rap = require('mat-rap'); var opoa = require('mat-opoa'); // rap mock数据环境 mat.task('default', function () ...
包括:采取Dom节点即用即释放的方法,保障永不持有Dom节点采用全新的事件代理方案,高效解耦Dom节点与事件响应体Magix 基于“约定大于配置”设计原则,可以快速构建可扩展的大型单页面Web应用,同时也特别注意 ...
OPOAdemo.rar extjs得单页系统实例
整个系统都使用了AJAX(Asynchronous JavaScript and XML)技术,与服务器交互采用异步方式,真正实现了OPOA(One Page One Application)单页程序。减少了用户等待的时间,抛弃了传统的B/S那种,提交>等待>刷新。
`opoa.txt`文件没有明确的上下文,可能是日志、配置文件或其他文本信息。 总结来说,jQuery的`load()`方法和iframe各有其特点和适用场景,不能简单地互相替换。理解它们的区别,并根据项目需求选择合适的技术,是...
OPOA框架确保了代码的优化,而自定义组件库则使得邮箱的功能能够快速扩展和定制。这些技术的结合,使得邮件到达速度加快,通信协议得到优化,页面加载速度提高了35%。 智能动态组件系统是网易企业邮箱5.0版的另一大...
2012年10月,随着iPad等平板设备的普及,支付宝开始重视高分辨率屏幕的显示效果,采用了CSS3特效来提升视觉体验,并引入了OPOA(Object Pooling Object Adapter)模式,优化了资源管理和页面渲染效率。此外,...
此外,原有的库和框架如YUI2/Tbra已无法满足需求,需要进行本地化的改进。 - **技术创新**:这一时期,前端开发开始采用栅格系统(Grid.css)来优化页面布局,并引入了一系列工具如Jslint、YC、Ant等来进行代码质量和...
作者引入了OPOA组件式开发方法,但是这种方法会增加js文件的总量。为了解决这个问题,作者推荐使用yui-compressor对js文件进行压缩混淆。 yui-compressor是Yahoo!开发的一款js压缩工具,可以将js文件压缩到原来的1/...
2. △OBP∽△OPA,即 OBOPOPOA=,变形为 2OPOA OB=×. 3. OPOBPAkOAOPPB===. 这些性质可以应用于解决各种问题,如确定圆心和半径、求解点的坐标等。 四、练习题和解答 我们提供了四个练习题和解答: 1. 已知 A...
例如,Android平台上的Web App方案会针对WebView组件进行优化和扩展,利用Webkit引擎提升性能,并通过界面优化技术如OPOA(Offscreen Page Cache)减少页面刷新,提升响应速度。 然而,HTML5技术目前仍存在成熟度...
Magix npm install magix 简介 Magix适合用来构建大型的、交互复杂的应用。应用可以是前后端分离的单页应用,也可以是传统的交互复杂的页面。 Magix通过特有的vframe(类似iframe的思路)帮你把页面按区块化拆分(这里...