Backbone删除视图和DOM节点

时间:2012-07-21 05:13:20

标签: javascript jquery dom backbone.js

所以我注意到我的应用程序在一些扩展使用后变慢了。特别是当我创建许多视图时,这些视图是长列表中的每个项目。我原以为通过view.remove()删除这些视图有助于解决问题,但是当它们从页面中删除时,我注意到Chrome的时间轴显示我的DOM节点数没有减少。我添加的每个视图都会继续增加这个数量。事实上,似乎唯一减少此节点计数的是页面刷新。

这对我来说感觉不对,我觉得我搞砸了一些非常基本的东西,因为问题似乎发生在我的所有观点而不仅仅是这些观点。这些视图列表的发生速度要快得多,因为它们有很多。

有没有人对我应该寻找什么有任何建议?什么样的原因可以产生这种行为?

我会提供代码,但我不知道哪些会有所帮助。

TL; DR - View.remove()正在从页面中删除视图,但我的DOM节点计数继续上升并且永远不会停止。

1 个答案:

答案 0 :(得分:6)

由于未正确清理视图而导致内存泄漏。

阅读本文:http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

并且:http://lostechies.com/derickbailey/2012/03/19/backbone-js-and-javascript-garbage-collection/

您需要做的不仅仅是在视图上调用.remove()。当您尝试关闭视图时,需要正确销毁所有挂起的事件和其他绑定。一种常见的方法是在视图上提供close方法,我在第一篇文章中对此进行了描述。

请务必在第一篇文章中阅读Johnny Oshika的评论。它指出了实现事件清理的好方法。