请稍等 ...
×

采纳答案成功!

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

老师,我有点听岔劈了。在Vue源码的时候,tag和key相同,就是相同节点,接下来不是进一步比较里面的children吗?怎么不再深度比较啊。

正在回答 回答被采纳积分+3

2回答

emn 2022-04-10 20:30:54

ppt 第三点写错了

0 回复 有任何疑惑可以回复我~
双越 2020-03-07 15:37:49

tag 和 key 都相等,是相同节点,即不会再深度比较了。

这一点在 diff 算法的三个优化规则里,讲到过。

0 回复 有任何疑惑可以回复我~
  • 提问者 前端沙雕 #1
    在Vue里面是讲到过我知道,就是有点疑惑。如果someVnode,则执行patchVnode,patchVnode不是再对比children吗,这不就是深度比较吗?
    回复 有任何疑惑可以回复我~ 2020-03-07 17:20:57
  • 双越 回复 提问者 前端沙雕 #2
    我又仔细回顾了一下 snabbdom 的源码,它在确定了 sameVnode 之后,确实又去执行了 patchVnode ,继续去深入对比了。这一点和我们讲的原则不太一样。我理解,这是因为它在 sameVnode 比较时,没有限制 key 是 undefined 。这样的话,新旧两个 vnode tag 一样,但都没有 key(即 key 都是 undefined),不能直接放弃,还是要进行比较的,这是 snabbdom 这个库实现的细节。但我们在理解 diff 算法的时候,还是建议按照那三个原则去理解,这样才能保证 diff 算法的计算效率。具体实现的时候,可能会根据不同的情况,做出不同的实现方案,这个也很正常。
    回复 有任何疑惑可以回复我~ 2020-03-08 22:53:13
  • 提问者 前端沙雕 回复 双越 #3
    明白了,谢谢老师,这个问题搞的我一直很纠结。
    回复 有任何疑惑可以回复我~ 2020-03-09 13:07:07
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信