请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

因为直接下载了最新版本的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回答

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

2 回复 有任何疑惑可以回复我~
  • 提问者 qq_三又木_04194201 #1
    嗯嗯,那估计是有一些边界情况,导致又回到了少计算,多更新。毕竟这样不会出错~就是多消耗了性能
    回复 有任何疑惑可以回复我~ 2019-09-16 09:55:34
  • ustbhuangyi 回复 提问者 qq_三又木_04194201 #2
    估计作者权衡利弊后的决定吧,有些时候,计算本身可能也是一种性能消耗。
    回复 有任何疑惑可以回复我~ 2019-09-16 10:07:22
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信