经过几次清洁尝试后,骨干仍在泄漏内存

时间:2013-08-05 00:34:00

标签: javascript jquery backbone.js

我在解决骨干内存泄漏方面遇到了问题,到目前为止,我尝试在从DOM中删除视图时使用jquery CleanData清理视图。

每次删除视图时(甚至通过jQuery .html())它都会触及dispose()方法,该方法理论上应该终止所有阻止视图被收集的引用。不幸的是,应用只是建立了内存

下面的代码,

Backbone.View.prototype.dispose = function(){
    // unbind all events, so we don't have references to child views
    this.unbind();
    this.off();
    // if we have a collection - unbind all events bound to this context
    this.collection && this.collection.off(null, null, this);
    // do the same with a model
    this.model      && this.model.off(null, null, this);
    delete this;
};

清理数据:

$.cleanData = function( elems ) {
    $.each( elems, function( i, elem ) {
        if ( elem ) {
            $(elem).trigger("dispose");
        }
    });
    oldClean(elems);
};

代码工作,dispose命中(我在视图中添加了事件)但是当我更改页面时它从未被收集过。

(关于出售事件..) 我没有明确地在所有视图上调用remove。 app容器被清空,jQuery执行cleanData。我添加了一个事件处理&我在cleandata中触发了这个函数

1 个答案:

答案 0 :(得分:3)

我认为问题是delete this没有做到你想象的那样。这取决于您如何发起您的观点。您是否将视图分配给任何变量,或者在超出您更改页面的范围内的范围内启动它?

此外,Backbone View上有一个函数remove()

有关JavaScript delete http://perfectionkills.com/understanding-delete/https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete

的更多信息