KnockoutJS内存释放

时间:2013-06-07 03:09:06

标签: jquery knockout.js

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

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

});

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

1 个答案:

答案 0 :(得分:2)

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

但是如果你不是真的刷新页面,而只是删除DOM元素并用新元素替换它们并重新绑定,那么你需要小心。

一般来说,请确保你......

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

在许多情况下,这一切都会为您清理,您不需要这样做。但是如果观察者的观察者比观察者寿命长,那么如果你没有取消订阅,观察者就会被记忆。如果您了解其中的差异,那么您只能跟踪和处理您知道将成为问题的订阅。

如果您发布了一些您认为正在泄漏的实际代码以及在什么条件下,那么可以提供更具体的建议。

相关问题