2

我们的 SPA 是使用 .NET 构建的,并使用 knockoutJS 进行客户端绑定。我们在初始页面加载时绑定了所有数据,并且在页面重新加载时遇到内存泄漏。我想知道处理嵌套敲除 oberservables 以避免内存泄漏的正确方法。我努力了

    $(window).bind('beforeunload', function () {
    ko.cleanNode(ko.vm)

});

(ko.vm 是我们的根视图模型)但仍然存在巨大的内存泄漏。我们是否需要在页面卸载时单独释放每个 subOberservable?我们的下一步是将我们的数据延迟绑定到视图..但是任何 knockoutJS 内存管理实践将不胜感激。

4

1 回答 1

2

如果您正在刷新页面,则浏览器应该释放任何内存。如果存在内存泄漏,则它是浏览器中的错误。您在哪个浏览器中看到了这种行为?你怎么知道有内存泄漏?

但是,如果您并没有真正刷新页面,而只是删除 DOM 元素并用新元素替换它们并重新绑定,那么您确实需要小心。

一般来说,确保你...

  • 处理任何订阅(如果您调用了someKoObject.subscribe(),则调用dispose的返回值subscribe以释放订阅)。
  • 处理您制作的任何 ko.computed 对象(因为它们在内部订阅事物)。

在许多情况下,这一切都会为您清理干净,您不需要这样做。但是在 observable 比观察者更长寿的情况下,如果你不取消订阅,那么观察者就会被保存在内存中。如果您了解其中的区别,那么您只能跟踪和处理您知道会出现问题的订阅。

如果您发布了一些您认为在什么情况下泄漏的实际代码,那么可以给出更具体的建议。

于 2013-06-07T13:15:48.347 回答