Vue最新版本中,computed watcher update 方法的问题

来源:5-2 计算属性 VS 侦听属性(2)

qq_三又木_04194201

2019-09-15

因为直接下载了最新版本的vue源码学习,所以可能和老师的版本不太一样。

// Vue 2.6.10版本
Watcher.prototype.update = function update() {
  debugger
  /* istanbul ignore else */
  if (this.lazy) {
    this.dirty = true
  } else if (this.sync) {
    this.run()
  } else {
    queueWatcher(this)
  }
}

老师视频中的版本
图片描述
在新版本中也没有getAndInvoke这个方法来,对比computed value来减少渲染。
是为什么呢,删除这种对比呢,全都放在queueWatcher中一起渲染?

写回答

1回答

ustbhuangyi

2019-09-16

课程录制的是 2.5.17-beta 版本,这个版本的计算属性实现很有意思,和其它版本都不同(最新版本的实现其实和之前版本的实现是一致的)。
视频版本的计算属性实现思想是——多计算,少更新,也就是每次都去计算,只有计算结果变了,才会去触发更新,比如一个计算属性有多个依赖发生变化,但是它们最终计算的结果没变,是不会触发更新的。
最新版本的计算属性实现思想是——少计算,多更新,一旦计算属性的依赖发生变化,不管最终计算的结果有没有变化,都会触发更新。

2
2
ustbhuangyi
回复
qq_三又木_04194201
估计作者权衡利弊后的决定吧,有些时候,计算本身可能也是一种性能消耗。
2019-09-16
共2条回复

Vue.js 源码深入解析 深入理解Vue实现原理

全方位讲解 Vue.js 源码,进阶高级工程师

4984 学习 · 1037 问题

查看课程