vue computed缓存原理

vue在初始化computed时会创建一个Watcher的实例,一开始lazy:true、dirty:true,就不会执行get()方法也就是不会计算属性值。当执行render函数时就会执行计算属性的get()方法,也就是在里面判断dirty是true还是false,为true就会调用evaluate()方法,它会执行get()方法,在取值前会先执行pushTarget()方法来将全局的Dep.target指向当前[computed的Watcher],在执行get()过程中会使用到data属性然后就会收集依赖,会将[computed的Watcher]添加到数据对应的Dep中。当执行完以上后Watcher就退出targetStack,接着Dep.target就会指向[render函数的watcher],然后判断当前Dep.target有值就执行Dep.depend()方法,depend是将[render函数的watcher]添加到[computed的watcher]的Dep实例中,这样当数据发生变化这两个都会收到通知然后渲染。最后把计算出最新的值赋给values并返回,同时把dirty设为false,当后面再用到这个data就判断dirty为false就从缓存里取。当依赖的数据改变了会触set()方法,然后调用Dep.notify()方法来通知[computed的Watcher]和[render函数的watcher],然后触发它们的update方法来让dirty = true,最后再重新计算value值。

参考:
https://www.jianshu.com/p/f238a4d5716e
https://blog.csdn.net/qq_42072086/article/details/106993983
https://blog.csdn.net/qq_20282263/article/details/88089821
https://blog.csdn.net/liu19721018/article/details/125574441
https://techgogogo.blog.csdn.net/article/details/127434289

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值