前一段时间我问过这个问题,关于如何ko.observableArray在批量更新时推迟更新,答案是更新包装的数组,然后通过valueHasMutated调用触发更新.
有没有一种等效的方法来推迟更新ko.observable()?我发现在更新一堆数据时花了很多时间来更新和重新更新依赖项.对这些更新进行批处理是否有良好的模式?
基因
这方面的几点想法:
有一个插件可以使相关更新更有效:https://github.com/mbest/knockout-deferred-updates.作者Michael Best现在参与了KO项目,并一直在帮助我们改进性能.这个插件最终可能会以某种形式进入KO核心.你应该尝试这个插件,看看你的应用程序如何使用它,因为它将为我们提供更多证据,表明需要进行这些类型的更改.
另一种方法类似于我在这里写的一段时间.基本上,您的ko.computed属性对可以打开和关闭的observable具有额外的依赖性.当它打开时,ko.computed将进行实际评估(这可能会创建许多依赖项).当它关闭时,它将返回最近的结果并删除除标志之外的所有依赖项.当您重新打开它时,它将再次重新评估.在大量更新期间,您可以暂停直到更新完成.