电话间隙内存管理
PhoneGap Memory Management
几个月来,我一直在使用PhoneGap 2.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 小时的播放后卡住,经过一周的调试,我们发现 2 个文件/对象/视图之间存在此指向的泄漏,这创建了一个循环引用并使 DOM 爆炸。
您也可以尝试使用谷歌浏览器的分析工具
几个有用的链接
- http://blog.socialcast.com/javascript-memory-management/
- 主干网.js内存管理,DOM 节点数量不断增加
- 我应该如何在Node中管理内存中的数据
- 如何使用java脚本更改浏览器的内存管理以增加会话存储和本地存储的内存
- 主干网.js事件和内存管理
- JavaScript 中的堆和本机内存分配:如何管理
- JavaScript 中的内存管理
- 转换 Redis 密钥时的内存管理
- 在 javascript 函数和内存管理中声明变量
- jQuery:新的临时 DOM 元素的内存管理
- 主干 + 木偶 - 模型/集合的内存管理最佳实践
- 在 express/node.js API 中进行高效的服务器端 JavaScript 内存管理
- 电话间隙内存管理
- JavaScript 中的性能内存管理
- Javascript内存管理:删除和拼接
- Javascript内存管理(requestAnimationFrame回调)
- 在Node.js中使用Native Abstractions时,如何管理内存
- 使用THRE.JS对象的全局数组的Javascript内存管理
- 管理屏幕外图像的内存
- 了解JavaScript中的内存管理,Mozilla
- 具有重复jQuery数据表AJAX调用的内存管理
- 在Javascript中管理内存变量的最佳方法是什么?