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