对于我的一个骨干项目(我无法实现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);
如果没有,它来自哪里?
答案 0 :(得分:0)
经过大量的chrome调试后,我发现主干关系从来没有真正替换我的对象,因为它正在对我的对象没有的id属性进行比较(物理和逻辑上)。
我最终从我的对象的不同有意义的属性计算md5哈希并将其用作id,因此骨干关系将知道它不应该将该对象视为新对象。
结论,这不是一个封闭问题,因为铬垃圾收集器做得很好。
注意:Backbone debugger帮助我找到了问题的来源。