我们的SPA使用.NET构建,并使用knockoutJS进行客户端绑定。我们将所有数据绑定在初始页面加载上,并且在页面重新加载时遇到内存泄漏。我想知道处理嵌套的击倒oberservables的正确方法,以避免内存泄漏。我试过了
$(window).bind('beforeunload', function () {
ko.cleanNode(ko.vm)
});
(ko.vm是我们的根视图模型)但仍然存在巨大的内存泄漏。我们是否需要在页面卸载时单独释放每个subOberservable?我们的下一步是将我们的数据延迟绑定到视图..但任何knockoutJS内存管理实践都将非常感激。
答案 0 :(得分:2)
如果您正在刷新页面,那么浏览器应该释放任何内存。如果有内存泄漏,那么它就是浏览器中的一个错误。您看到这种行为的浏览器是什么?你怎么知道内存泄漏?
但是如果你不是真的刷新页面,而只是删除DOM元素并用新元素替换它们并重新绑定,那么你需要小心。
一般来说,请确保你......
someKoObject.subscribe()
,则在dispose
的返回值上调用subscribe
以释放订阅。在许多情况下,这一切都会为您清理,您不需要这样做。但是如果观察者的观察者比观察者寿命长,那么如果你没有取消订阅,观察者就会被记忆。如果您了解其中的差异,那么您只能跟踪和处理您知道将成为问题的订阅。
如果您发布了一些您认为正在泄漏的实际代码以及在什么条件下,那么可以提供更具体的建议。