Vue是否像计算属性一样监视属性缓存?

时间:2017-01-14 01:49:08

标签: javascript vuejs2 vue.js vuex

在Vue docs it is mentioned中,计算属性被巧妙地缓存而不是使用常规方法:

  

相比之下,每当重新渲染发生时,方法调用将始终运行该函数。   为什么我们需要缓存?想象一下,我们有一个昂贵的计算属性...

我的问题是watched properties还有像计算属性一样的缓存吗? (包括Vuex观看,例如使用vm.$store.watch...

2 个答案:

答案 0 :(得分:2)

虽然saurabh的答案没有错,但我觉得它并没有真正回答这个问题。

答案是:不,观察者没有"缓存" - 毫无意义,因为观察者是具有副作用的功能,但没有返回值且不能用作属性。

因此,为观察者缓存任何东西都没有必要或明智。

但是,两者都只在观察到的数据发生变化时执行。

答案 1 :(得分:1)

watchers的行为与computed的行为相同,因为computed使用watchers在内部实施。当一个人定义一个computed属性时,vue会在内部为计算属性中使用的变量设置观察者,请参阅以下source中的代码:

function makeComputedGetter (getter: Function, owner: Component): Function {
  const watcher = new Watcher(owner, getter, noop, {
    lazy: true
  })
  return function computedGetter () {
    if (watcher.dirty) {
      watcher.evaluate()
    }
    if (Dep.target) {
      watcher.depend()
    }
    return watcher.value
  }
}

因此,当被动数据发生变化时,用computedwatch块编写的代码只会被执行一次。