ExtJS开发时,注意"游离"的组件实例引发内存泄漏

本文探讨了在不断创建并遗弃组件实例时导致内存泄漏的问题,特别是右键菜单的场景。阐述了组件与普通对象的区别,以及为何组件实例需要主动销毁。提供了两种解决策略:一是使用后立即销毁,二是复用已创建的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

情形

最常见的情况,就是不断创建右键菜单,如下:
在这里插入图片描述
上面的代码,每次右键点击,都创建了一个 menu 实例,用完未销毁。以后再也无法引用到这些实例,这样就引发内存泄漏。这种错误的做法一般新人都会经历的。

组件 不同于 一般的 object,一般的 object 可能可以被垃圾回收,但是组件实例因为有 dom 存在,需要销毁。

一般,父容器的销毁,会自动销毁其下的子组件。然而上述代码中创建的 menu,并没有父组件,也就是 menu.parent 不存在,menu 是游离在视图之外的,因此无法被自动销毁,需要手动 destroy。

改进方法:

1、用完就销毁
如果是 Dialog,可以设置 closeAction: ‘destroy’,并且 “取消”按钮的逻辑是 dialog.close() ,可以关闭时销毁。

2、复用已创建的实例
已创建的实例需要用一个 view 或 controller 的成员变量引用着,以便下一次使用。注意在 view 或 controller 销毁时,一同销毁。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘_博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值