几个月来,我一直在使用PhoneGap 2.8
和在我使用的 javascript 端开发一个 Android 应用程序,Backbone
并jQuery
作为我的主要框架。随着我的应用程序增长到合理的大小,我开始注意到相当大的内存消耗。阅读了不同的文章来解释为什么PhoneGap
甚至需要大量内存才能运行,我仍然相信我可以对我使用内存的方式进行一些优化。
我们BackBone
有一个 Router 对象,它将 URI-s 映射到特定的函数,这为我呈现了一个称为View
对象的东西。我不仅实现了我的路由器功能来创建视图并渲染它,而且我还存储了对当前正在显示的视图的全局引用。所以在创建新视图之前,我告诉旧视图进行一些清理(这是递归完成的,因为视图可以包含更多“子”视图)。在清理下,我目前告诉 view 取消对他的事件的授权(我相信Backbone
删除事件侦听器)。目前没有做更多的事情。渲染新视图后,全局变量将引用新视图。我相信 javascript GC 会释放旧视图使用的内存。唉,我不知道这种情况正在发生——我在我的应用程序中浏览的越多,内存消耗的就越多。我知道有一些内存泄漏正在发生,但我无法弄清楚它是什么,这需要内存。我怀疑的一件事是旧对象由于某种原因没有被正确收集。我怀疑一旦我在某个容器上呈现新的 html (DOM),也许旧DOM
的会导致内存泄漏,也许某些事件处理程序被不必要地存储在某个地方。
我想知道的是,是否有任何工具、命令或提示可以帮助我调试/跟踪/测量内存分配的位置。有没有办法访问所有事件侦听器并以某种方式测量它们(对于 DOM 也是如此)。任何有关智能内存高效技术的文章也将不胜感激。目前我唯一能做的就是开始递归地删除我愿意销毁的对象的所有属性(最后也是对象)。
非常欢迎任何建议!先感谢您。