在单页式的Extjs应用中,由于Extjs存在许多的全局变量,这些全局变量包括了如:
Element Cache,Event Cache,ComponentMgr,ButtonMgr等等,内存的泄漏往往由于组件销毁时,没注意清除这些变量而引起。在2.2由guig提供的patch包,很大程度上保证了Extjs自带的组件正确的销毁。
下面提供一个检测ComponentMgr中是否累积了Component的代码:
function() {
var items = Ext.ComponentMgr.all.items;
var comIds = ewp.util.CheckLeakInEvents.comIds = ewp.util.CheckLeakInEvents.comIds || {};
//累加组件出现次数
for (var i = 0; i < items.length; i++)
{
comIds[items[i].id] = (comIds[items[i].id] || 0) + 1;
}
//打印出现次数超过一次的组件Id
var result = [];
for(var key in comIds)
{
if(comIds[key] > 1)
{
result.push(key + "=" + comIds[key]);
}
}
alert(result.join(", "));
}
该方法可以作为一个Button的handler,每次点击一次,察看那些组件累积在了ComponentMgr中,结合FireBug设置断点,通过Ext.ComponentMgr(id),察看更多的组件信息。
遇到组件泄漏的场景:
如 tbar = [new TextField({...})],tbar所在的Grid作为TabItem,并且该TabItem延迟渲染,那么由于new TextField({...})已经注册,但因为未渲染,toolbar中未添加该Field为其Item,导致未销毁组件。(解决办法:通过复写onDestroy主动销毁,或是使用{xtype:""}延迟组件创建),总之,如果主动new ...的组件,那么注意销毁时,是否销毁了相应的组件。
分享到:
相关推荐
"ExtJS 内存泄露补丁"正是为了解决这个问题而设计的。 内存泄露通常发生在JavaScript环境中,因为其自动垃圾回收机制可能会由于某些编程错误或不恰当的代码实践而失效。在ExtJS中,这可能源于以下几个方面: 1. **...
在2.2版本中,尽管它提供了许多优秀的功能,但与许多其他JavaScript库一样,ExtJS 2.2也存在一些已知的问题,其中最令人关注的是内存泄漏问题。尤其是在老旧的Internet Explorer 6(IE6)浏览器上,这个问题尤为严重...
3. **ExtJS组件分析**:由于ExtJS是基于组件的框架,sIEve特别关注组件的生命周期,能够检测到未正确销毁的组件,这些组件往往是内存泄漏的主要来源。 4. **事件监听器检查**:事件监听器如果没有被正确移除,也...
内存泄露是计算机编程中一个严重的问题,特别是在JavaScript这种在浏览器环境中运行的语言中。...在维护大型EXTJS应用程序时,定期检查和应用最新的内存泄露补丁是至关重要的,以保持系统的稳定性和高效运行。
【标题】"续:ExtJS Chart 扩展(重构了下,并写了个新的示例--内存监控)"指的是一个关于ExtJS图表扩展的更新版本,其中作者进行了重构,并且添加了一个全新的示例,用于实现内存监控功能。这个主题涵盖了两个主要的...
ExtJS支持多种布局管理方式,并且具有高度可定制性,这意味着开发者可以根据实际需求对组件进行定制和扩展。此外,ExtJS还支持数据绑定、服务器通信等功能,极大地简化了复杂应用的开发过程。 ### 三、解压密码的...
"extjs2.2已整合内存补丁"指的是这个版本的ExtJS已经包含了针对内存管理的优化,以解决可能存在的内存泄漏问题,从而提高应用的性能和稳定性。 在ExtJS 2.2中,开发者可以利用其丰富的组件库,如表格(Grid)、面板...
- **性能优化**: 注意内存管理和事件监听,避免内存泄漏和不必要的计算。 - **版本控制**: 使用Git等版本控制系统,确保代码安全和团队协作。 - **测试驱动**: 编写单元测试和集成测试,确保代码质量。 - **持续...
本文将深入探讨ExtJS中TabPanel组件在关闭后如何有效地释放内存,以及为何在特定环境下(如IE浏览器)这一过程可能变得尤为复杂。 #### TabPanel组件与内存泄露 TabPanel是ExtJS框架中一个常用且功能强大的组件,...
- 基于组件:ExtJS 2.2的核心是其强大的组件模型,提供了各种预定义的UI组件,如表格、表单、树形视图、面板等,这些组件可以灵活组合以构建复杂的用户界面。 - 数据绑定:框架支持双向数据绑定,使得UI与数据模型...
EXTJS允许开发者自定义组件,包括创建具有特定功能的表单、窗口和其他界面元素。为了添加水印,我们需要创建一个新的组件或者扩展已有的组件,例如表格或图像查看器,使其在显示时自动添加水印。这通常通过在组件的...
3. **组件化开发**:ExtJs强调组件化开发,HRMS中的每个功能模块都可以视为一个可复用的组件。例如,员工信息管理可能包含一个员工列表视图、一个员工详情编辑窗体等,这些组件可以独立开发和测试,然后组合成完整的...
- **组件事件**:对于Ext.Component的事件,Ext3.0引入了`mon`方法,可以有效防止内存泄露,如`this.mon(this.el, 'click', this.click, this)`。 - **Ext.EventManager**:ExtJS的事件管理策略封装在这个单体类中...
5. **销毁Panel时自动移除事件监听器**:如果你的Panel会在应用的某个阶段被销毁,推荐使用`mon`和`mun`这两个方法,它们会在Panel销毁时自动移除监听器,避免内存泄漏: ```javascript var listener = function() {...
1. **EXTJS组件使用**:理解EXTJS的各种组件,如Panel、Grid、Form、Tree等,以及如何根据需求组合和定制这些组件。 2. **数据绑定**:EXTJS支持双向数据绑定,通过Store与Model实现视图和数据的同步更新,简化了...
5. **事件分离与移除**:使用`removeListener`(或简写`un`)方法可以移除事件监听器,避免内存泄漏。例如: ```javascript button.removeListener('click', buttonHandler); ``` 6. **事件链**:EXTJS支持事件链,...
ExtJS 是一个强大的JavaScript库,专门用于构建富客户端应用程序。...在实际项目中,确保正确使用和适当地集成此类组件至关重要,同时也要遵循相关的安全标准和最佳实践,以保护用户的个人信息不被泄露。
10. **最佳实践**:遵循最佳实践,如合理组织代码、避免内存泄漏、使用适当的组件配置等,可以确保代码的质量和可维护性。 总的来说,"ExtJS_3.3中文帮助文档"不仅涵盖了ExtJS的基础知识,还深入讲解了高级特性和...
系统利用ExtJS的组件模型,如表格、面板、窗口、菜单等,构建出直观且交互性强的用户界面。此外,ExtJS的布局管理器使得页面元素可以灵活地适应不同屏幕尺寸,提高了系统的响应式设计。 2. **三层架构**: 系统...