【发布时间】:2013-05-04 10:17:42
【问题描述】:
我有一个内置在主干JS 中的测验应用程序,我有三个视图。显示整体进度和后退/下一步按钮的 QuizView。包含一组问题和每个问题的 QuestionView 的 PageView。
当用户在测验中进入下一页时,我通过调用一个销毁函数来删除当前的 PageView,该函数在页面本身和所有问题上调用 Backbone 的 remove()。 (所有监听器都附有listenTo)
我的期望是,在我这样做之后,DOM 节点不应再反映在内存时间轴中。我附上了来自 Chrome 开发工具的 DOM 节点数视图,您可以看到它随着您进入新页面而增加。
我还拍摄了一个堆快照,当我查看分离的 DOM 项目时,它们都有一个项目(页面的 div 容器)在保留树中有一个项目。我假设这就是他们没有被收集的原因。
谁能提供关于为什么 DOM 节点数持续上升的见解?
这也是我在 PageView 中的销毁功能:
destroy: function(){
console.log("PageView :: destroy " + this)
_.each(this.childViews, function(view){
view.remove();
});
this.remove();
}
【问题讨论】:
标签: javascript backbone.js memory-management garbage-collection google-chrome-devtools