避免dojo中的内存泄漏?
Posted
技术标签:
【中文标题】避免dojo中的内存泄漏?【英文标题】:Avoid memory leaks in dojo? 【发布时间】:2011-09-16 14:26:57 【问题描述】:对于使用 dojo 等工具包在浏览器中长时间运行的应用程序,我一遍又一遍地听到必须避免悬挂引用的观点。但在内存管理方面,每种语言/框架都有自己的特点。
在 dojo 中构建应用程序时如何避免悬空引用?我正在考虑 ios 中“alloc”的规则:如何使用,以及如何在完成后自己清理。
【问题讨论】:
【参考方案1】:我认为道场最重要的事情是你应该记住断开你连接的任何事件。
这有一个简单的模式,例如在自定义 dijit 中:
//connecting some events
this._events = [
dojo.connect(...),
dojo.connect(...)
];
现在,断开连接非常简单:
dojo.forEach(this._events, dojo.disconnect, dojo);
在 dijit 中使用 this.connect
时也适用相同的模式。
【讨论】:
请注意,dijit 小部件在被销毁时会自动清理与widget.connect
相关的任何内容 - 通常,所有小部件在页面卸载时都会被销毁(至少在 IE 中,它在历史上是它所在的位置很重要)。【参考方案2】:
还应该注意的是,即使您遵循this answer 中提到的断开事件处理程序的良好做法,您也可能会遇到麻烦。可能存在垃圾收集器无法检测到的循环引用,或者 Dojo 本身未正确释放的引用。有时您需要对它们显式调用“删除”。以this 为例。
【讨论】:
我认为任何工具集都是如此。但大多数都有一些指导方针,可以帮助解决许多可预防的情况。以上是关于避免dojo中的内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章