递归定时XHR来填充集合

时间:2013-12-31 09:12:34

标签: backbone.js closures backbone-relational

对于我的一个骨干项目(我无法实现REST / sync),我需要每隔X秒刷新一个骨干集合(使用骨干关系作为模型,如果重要吗?)。

我一直在做的是实现这样的功能:

refresh: function(){
    var self = this;

    // clears timeout
    self.timeoutRefresh && clearTimeout(self.timeoutRefresh);

    // aborts request if running
    self.xhrRefresh && self.xhrRefresh.abort();

    // do request
    self.xhrRefresh = self.options.myfunction.call(self, {}, function (data) {

        self.mycollection.set(data);

        // call it again in 5 seconds
        self.timeoutRefresh = _.delay(function(){
            self.refresh.call(self);
        }, 5 * 1000);
    });
},

问题是这段代码似乎在我的应用程序中存在大量内存泄漏。

self变量是否存在闭包问题?

我应该以这种方式进行递归调用吗?

self.timeoutRefresh = _.delay(function(context){
    context.refresh.call(context);
}, 5 * 1000, self);

如果没有,它来自哪里?

1 个答案:

答案 0 :(得分:0)

经过大量的chrome调试后,我发现主干关系从来没有真正替换我的对象,因为它正在对我的对象没有的id属性进行比较(物理和逻辑上)。

我最终从我的对象的不同有意义的属性计算md5哈希并将其用作id,因此骨干关系将知道它不应该将该对象视为新对象。

结论,这不是一个封闭问题,因为铬垃圾收集器做得很好。

注意:Backbone debugger帮助我找到了问题的来源。