【发布时间】:2013-04-16 07:43:17
【问题描述】:
我有以下情况: - 具有大量项目的应用程序。 (100万+) - 在列表中的每个项目上都有一个可观察的。
如果我从应用程序初始化创建可观察对象,应用程序将冻结,因为它需要大量处理和内存。解决方案是按需创建它们,因为项目将一次部分呈现。这很容易做到。
我需要的是,在我取消绑定项目后,显示一个新批次,销毁已创建但不再使用的可观察对象。
一种解决方案是,当我切换到新批次时,遍历旧批次并销毁。这也很容易做到,但不幸的是还不够。
我的应用程序被拆分为多个组件,每个组件可能使用也可能不使用主项目池中的项目。这意味着我不能只搜索之前解绑的项目并销毁可观察对象,而是必须搜索所有组件。从性能的角度来看,这并不好,而且组件不需要相互了解也不好。
所以我的问题是。一旦没有更多订阅者,在淘汰赛中是否有任何方法(内置或不内置)来销毁可观察对象?
谢谢。
【问题讨论】:
-
ko.computed必须手动处理,因为它会创建对其他可观察对象的新引用,但是一旦没有更多对它的引用,JS 就应该对普通的可观察对象进行垃圾回收。我错了吗? -
并非如此。 ko.computed 有以下 2 个选项: disposeWhen 和 disposeWhenNodeIsRemoved 以便处理它们。 Observables 基本上是附加到模型上的,所以除非你专门删除它们,否则它们不会被收集。不过,我的问题是,我需要知道什么时候处理 observables,像 disposeWhenNodeIsRemoved 这样的东西绝对很棒,但我没有找到类似的东西或回调。
-
您的“按需创建逻辑”是在单个位置还是在每个组件中?如果您可以将该逻辑放在一个位置,您是否也可以跟踪它们并取消绑定任何以前的逻辑?
-
是的,但这就是我想说的,我不想跟踪它。就算创建起来很容易,毁掉它也可能会带来各种各样的问题。我想依靠“淘汰赛”解决方案。
-
如果您添加一个简短的代码示例来说明您正在尝试做什么,这会有所帮助。