Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PhoneGap内存管理_Javascript_Backbone.js_Memory Management_Memory Leaks_Cordova - Fatal编程技术网

Javascript PhoneGap内存管理

Javascript PhoneGap内存管理,javascript,backbone.js,memory-management,memory-leaks,cordova,Javascript,Backbone.js,Memory Management,Memory Leaks,Cordova,几个月来,我一直在使用phonegap2.8开发一款Android应用程序,在javascript方面,我使用Backbone和jQuery作为主要框架。当我的应用程序增长到一个合理的大小时,我开始注意到相当大的内存消耗。阅读了不同的文章,解释了为什么PhoneGap运行时需要大量内存,我仍然相信我可以对如何使用内存进行一些优化 在BackBone中,我们有一个路由器对象,它将URI-s映射到特定的函数,这使我得到了一个称为视图的对象。我不仅实现了我的路由器函数来创建一个视图并进行渲染,而且还全

几个月来,我一直在使用
phonegap2.8
开发一款Android应用程序,在javascript方面,我使用
Backbone
jQuery
作为主要框架。当我的应用程序增长到一个合理的大小时,我开始注意到相当大的内存消耗。阅读了不同的文章,解释了为什么
PhoneGap
运行时需要大量内存,我仍然相信我可以对如何使用内存进行一些优化

BackBone
中,我们有一个路由器对象,它将URI-s映射到特定的函数,这使我得到了一个称为
视图的对象。我不仅实现了我的路由器函数来创建一个视图并进行渲染,而且还全局存储对当前显示视图的引用。因此,在创建新视图之前,我告诉旧视图进行一些清理(这是递归完成的,因为视图可以包含更多的“子”视图)。在“清理”下,我当前告诉view取消对其事件的委派(我相信
Backbone
会删除事件侦听器)。目前没有做更多的工作。渲染新视图后,全局变量将引用新视图。我相信javascript GC将释放旧视图使用的内存。唉,我不知道这是怎么回事——我在我的应用程序中导航的次数越多,占用的内存就越多。我知道有一些内存正在泄漏,但我不知道是什么,这需要内存。我怀疑的一件事是,由于某种原因,旧对象没有被正确地垃圾收集。我怀疑,一旦我在某个容器上呈现新的html(DOM),可能是旧的
DOM
导致内存泄漏,可能是一些事件处理程序被不必要地存储在某个地方

我想知道的是,是否有关于如何调试/跟踪/测量内存分配位置的工具、命令或提示。是否有一种方法可以访问所有事件侦听器并以某种方式测量它们(DOM也是如此)。任何有关智能内存高效技术的文章也将不胜感激。目前我唯一能做的事情,就是开始递归删除我想要销毁的对象的所有属性(最后也是对象)

欢迎任何建议!
先谢谢你

我的第一个phonegap应用程序也遇到了类似的问题。我们设法应用的技术很少

*旧视图-视图被导航离开

  • 解除与旧视图关联的所有事件的绑定
  • 从dom中删除连接到视图的所有节点,以确保事件也已删除
  • 删除旧的视图对象、模型/集合,以便DOM上不再保留任何实例
  • 此外,尽量使用原型,因为通过原型创建的函数只占用RAM中的一次空间。因此,如果再次创建/启动视图,其关联/子函数将不会再次推入RAM
  • 对于大多数imp,请确保“this”指针不会在文件之间的任何位置泄漏。我的一个工作场所曾经在玩了1.5小时后陷入困境,经过一周的调试,我们发现在两个文件/对象/视图之间有一个漏洞,这造成了循环引用,使DOM爆炸
你也可以尝试使用谷歌Chrome的评测工具

很少有有用的链接


因为我使用jQuery通过.html(数据)函数向DOM添加内容,所以我读到调用.empty().html(数据)是一个更好的选择,因为empty()在删除DOM元素之前会删除事件处理程序和所有文本。读了这篇文章后,我在所有的.html()调用前都添加了empty(),但我没有注意到有很大的改进。我仍然相信问题的根源是可以找到的。Chrome有一个与ADB一起使用的扩展,但我认为它只适用于Chrome,而不适用于原生Android浏览器(在WebView中使用)。Paul Irish建议了一个您可以使用的工具列表:。我以前用过,但它不做分析。我已经试过jsHybugger了,我真的很喜欢它目前提供的功能。jsHybugger的开发人员告诉我,不久他将发布一个版本,该版本将包括时间轴选项卡功能,并在内存中查看当前的javascript对象(正是我所需要的)。换句话说,jsHybugger是phonegap开发的一个非常有用的工具,我向大家推荐它。jsHybugger和Android上的远程调试Chrome有什么区别吗?