使用淘汰缓存计算值
Cache computed values with knockout
假设我想创建一个函数,循环数组(observableArray
)中的所有元素,并从数组中返回适当的项。
我正在考虑创建一个computed
函数来处理这个问题,并使用ko.utils.arrayFilter
进行过滤。
我应该缓存此操作吗?还是computed
或arrayFilter
在内部执行?
计算的可观测值被缓存。它们的值仅在初始和依赖关系发生变化时计算。因此,您可以一次又一次地访问该计算的值,并始终接收缓存的值。
根据你的评论,听起来你想根据某些参数创建计算的可观察性。该技术的几个注意事项:
-
单个元素的绑定在计算的可观察对象内部执行,以跟踪依赖关系。这意味着,如果你只想在UI中使用过滤器,那么你实际上可以避免创建计算的可观察对象,只需直接调用过滤器函数。每当依赖项发生更改时,绑定就会触发,函数就会再次运行。如果您还想以编程方式与过滤后的数据进行交互,那么这不是最好的解决方案。以下是一个示例:http://jsfiddle.net/rniemeyer/QSgPz/
-
如果你要经常使用这个概念,那么你甚至可以扩展observableArray,直接从observableArray中调用过滤器,比如:http://jsfiddle.net/rniemeyer/VhCVc/
-
作为一种选择,如果您有一个返回计算结果本身的函数,那么您需要确保对所需的每个计算的过滤器只调用一次。您不希望从绑定中调用它,因为每次触发绑定时都会重新创建它(除非您有一个在init中正确处理它的自定义绑定)。以下是一个示例:http://jsfiddle.net/rniemeyer/JrHnT/.同样,如果您经常使用observableArrays,您可以扩展它,以便能够为您创建一个计算的数组。
因此,如果您只使用绑定中的这个,那么您可以选择跳过计算,只使用一个函数,因为绑定使用自己的计算可观察对象。如果您需要从视图模型中与它交互,那么您可能希望在那里创建过滤器。
- 根据元素和容器大小计算边距
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 如何在从浏览缓存加载页面时执行javascript
- 使用D3.js计算带有字母间距的文本长度
- ReactJS和SpringDataRest缓存问题可能与websocket有关
- 缓存谷歌地图数据
- 使用CSS或JavaScript计算分页符的数量
- 可以't计算自定义谷歌地图的js
- 如何计算每个元素's的高度,并将这些值用作函数中的变量
- JavaScript计算帮助(乘以时间)
- 如何计算对象文字中的键
- JavaScript循环无法正确计算/显示结果
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- 防止jQuery Mobile中的ajax缓存
- 四舍五入JavaScript计算
- 计算HTML中的页数
- 使用jQuery计算数组中的对象以更改进度条
- 使用淘汰缓存计算值
- 如何缓存/预先计算某个内容(没有全局变量)
- 在React中根据状态缓存计算值的惯用方法