KnockoutJs学习笔记(四)

本文深入探讨了纯计算Observable与一般计算Observable的区别,着重介绍了其在ViewModel中的优势,包括性能提升与存储管理优化,并阐述了如何通过避免副作用与依赖单一数据源来实现高效计算。
摘要由CSDN通过智能技术生成

由于Writable computed observablesHow dependency tracking works的要求相对较高,我先跳过这两篇,学习Pure computed observables

Pure computed observables相对于一般的computed observables,在性能和存储上有优势,这是因为pure computed observables在不存在订阅者的时候是不会保持订阅关系的。这也使得pure computed observables有如下两点特点:

  • 可以防止没有被订阅的computed observables的存储泄露。
  • 可以降低因重复计算未被订阅的computed observables而造成的运算过载。

一个pure computed observable能够依据它是否拥有订阅者而自动地在两种状态下切换:

  1. 当不存在订阅者的时候,pure computed observable会进入休眠状态,此时的它,会关闭所有依赖于它的订阅关系,同时也不会再追踪它所关联的observables。一旦处于休眠状态的computed observable的值被读取的话,它就需要重新计算以便以确保值得正确性。
  2. 当它拥有订阅者的时候,pure computed observable会进入监听状态。一旦进入监听状态,它会立即调用它的function和订阅程序来追踪它所关联的observables。在这种状态下,pure computed observables和普通的computed observables无异。更为详细的内容需参考How dependency tracking works部分

按照文档的说明,选择pure computed observables有两条原则。一是computed observable在运算的时候不能产生副作用(不能对其他的observables产生影响);二是computed observable的值应该仅仅依赖于它所关联的observables的值,而不是其他隐含的信息。

Pure computed observables有两种定义方式:

1 this.fullName = ko.pureComputed(function() {
2     return this.firtstName() + " " + this.lastName();
3 }, this);

或是:

1 this.fullName = ko.computed(function() {
2     return this.firstName() + " " + this.lastName();
3 }, this, { pure: true });

另外,在稳固的(persistent)view model中使用pure computed observables能够提供运算性能上提升,在临时的(temporary)view model中使用pure computed observables能够提供存储管理上的提升。

有关性能方面的问题,留作以后研究

转载于:https://www.cnblogs.com/charlieyuki/p/3928902.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值