【问题标题】:Avoid memory leaks in dojo?避免dojo中的内存泄漏?
【发布时间】:2011-09-16 14:26:57
【问题描述】:

对于使用 dojo 等工具包在浏览器中长时间运行的应用程序,我一遍又一遍地听到必须避免悬挂引用的观点。但在内存管理方面,每种语言/框架都有自己的特点。

在 dojo 中构建应用程序时如何避免悬空引用?我正在考虑 iOS 中“alloc”的规则:如何使用,以及如何在完成后自己清理。

【问题讨论】:

    标签: javascript dojo


    【解决方案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 为例。

    【讨论】:

    • 我认为任何工具集都是如此。但大多数都有一些指导方针,可以帮助解决许多可预防的情况。
    猜你喜欢
    • 1970-01-01
    • 2018-04-08
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    相关资源
    最近更新 更多