相关疑难解决方法(0)

用于跟踪JavaScript内存泄漏的工具

我有一个Web应用程序在某处有内存泄漏,我无法检测到它.我已经尝试过通常运行良好的Chrome开发人员工具,但我无法追查负责的代码行.Chrome工具只是给了我太多的信息,我无法将内存中的对象与我的代码联系起来.

还有其他可能有用的工具吗?

javascript memory-leaks google-chrome-devtools

18
推荐指数
1
解决办法
1万
查看次数

PhoneGap内存管理

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

BackBone我们有一个Router对象,它将URI-s映射到特定的函数,这使我得到了一个名为a的东西,View的对象.我不仅实现了我的路由器功能来创建视图并渲染它,而且还存储了对当前正在显示的视图的全局引用.因此,在创建新视图之前,我会告诉旧视图进行一些清理(由于视图可以包含更多"子"视图,所以这是递归完成的).在清理过程中,我现在告诉他们去取消他的事件(我相信Backbone删除事件侦听器).目前没有做更多的事情.呈现新视图后,全局变量将引用新视图.我相信javascript GC会释放旧视图使用的内存.唉,我不会发生这种情况 - 我越是浏览我的应用程序,内存就越耗尽.我知道有一些内存泄漏,但我无法弄清楚它是什么,需要内存.我怀疑的一件事是旧的物体由于某种原因没有被正确地收集垃圾.我怀疑,一旦我在某个容器上渲染新的html(DOM),也许旧DOM的导致内存泄漏,也许某些事件处理程序被不必要地存储在某个地方.

我想知道的是,是否有任何工具或命令或提示如何调试/跟踪/测量分配内存的位置.有没有办法访问所有事件侦听器并以某种方式测量它们(DOM相同).任何有关智能记忆效率技术的文章也将受到赞赏.目前我唯一可以做的事情就是开始递归地删除对象的所有属性(在最终对象中)我愿意销毁.

任何建议都非常欢迎!先感谢您.

javascript memory-leaks memory-management backbone.js cordova

5
推荐指数
1
解决办法
7314
查看次数

再次在Backbone Zombie Views上

我正在努力了解骨干,目前正在与僵尸观点进行斗争.我已经阅读了很多关于此事的堆栈溢出帖子,但我仍然无法弄明白.

为简单起见,我设置了两个需要切换的视图(没有数据).到目前为止我做的是:

  1. 创建一个对象

    //define application object
    var app = {
      vent: {},
      templates: {},
      views: {},
      routers: {},
    };

    //instantiate event aggregator and attach it to app
    app.vent = _.extend({}, Backbone.Events);

  1. 定义两个非常简单的模板(存储到app.templates中):第一个有一些虚拟文本和一个按钮(带有和'test-begin'的id),第二个只有虚拟文本

  2. 定义两个视图


    app.views.instructions = Backbone.View.extend({

        //load underscore template
        template: _.template(app.templates.instructions),

        //automatically called upon instantiation
        initialize: function(options) {

            //bind relevant fucntions to the view
            _.bindAll(this, 'render', 'testBegin', 'stillAlive', 'beforeClose');

            //listen to app.vent event 
            this.listenTo(app.vent, 'still:alive', this.stillAlive);

        },

        //bind events to DOM elements
        events: {
            'click #test-begin' : 'testBegin',
        },

        //render …

javascript backbone.js

4
推荐指数
1
解决办法
781
查看次数

Backbone删除视图和DOM节点

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

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

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

我提供代码,但我不知道什么是有用的.

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

javascript jquery dom backbone.js

3
推荐指数
1
解决办法
4218
查看次数