3

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

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

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

我会提供代码,但我不知道有什么帮助。

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

4

1 回答 1

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 在第一篇文章中的评论。它指出了一种实现事件清理的好方法。

于 2012-07-22T16:31:44.080 回答