【发布时间】:2013-06-07 15:12:35
【问题描述】:
我使用Backbonejs 和Requirejs 来创建单页网络应用程序。
我的应用好像有memory leaks。
为了测试,我创建了一个示例代码。它创建一个视图对象,调用其render 函数并将返回的html 附加到DOM。
返回的html 有一个button。点击按钮后,其callback 调用destroy 函数,视图被销毁。
但是,当我运行chrome heap profilier 时,我可以看到detached DOM tree 仍然徘徊。深入其中,可以看到jQuery 保存的references。
我怀疑这是否是内存泄漏。
如果是,mycode 没有保留任何引用。
那么问题出在jQuery 吗?
这是link 示例代码。
我还附上了堆快照的屏幕截图。
【问题讨论】:
-
作为一般建议:在处理此类问题时,请尝试隔离每个元素:摆脱 requirejs 以便在调试时减少处理。另一个建议是升级到 Backbone 1.0.0 并使用新的
listenTo和stopListening函数,这些函数正是为了处理这类问题而引入的。请记住,在视图上调用remove也会调用stopListening。 -
@gustavohenke 骨干网没有任何内存泄漏问题。它们是由开发人员创建的 :)
-
如果您有内存问题,请开始查看所有处理程序的位置...可能是某些处理程序被您的视图隐式设置,而 remove 无法处理。
-
@amchang87 请看第三张图片,你会注意到主干没有保留任何参考,它的 jQuery。
-
@namero999 我没有监听任何模型的事件,我只是在 DOM 中附加了一些 html。我现在的泄漏问题不是模型,而是分离的 DOM 树,它占用了很大一部分我的原始应用程序中的内存。
标签: jquery backbone.js memory-leaks requirejs