请稍等 ...
×

采纳答案成功!

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

diff算法的问题

老师没有看到关于数据更新时 diff算法的章节啊 是没找到还是还没有这节课?
有两个问题 :
1.在上一章 您讲到 vue技巧 那个柯里化 那里 nodeOps,
我在看diff算法的时候,我看只要是遇到了需要更改的地方,那就直接操作dom了 例如: a向后插入到最后,b向前移动, c删除 等等 这些操作 只要需要操作 就直接操作dom了

我最开始的理解是 比对虚拟dom 然后将这些操作记录下来(变化的操作),然后最后一次性操作dom 就类似于 创建documentFragement 那个一样,但是源码里 是每一步都操作啊 ? 为啥

  1. 在diff的时候 没有key的 操作:
    我看 2.4版本以前,没有key 就直接创建新的节点,2.4以后的版本 如果没有写key 会去oldVnode内部去遍历 看看有没有 当前的startNewVnode 这个节点, 老师这个理解没错吧? 如果是遍历的话是不是开销有点大啊 , tag text…child…任何属性都相同才复用啊 这是不是有问题啊?

麻烦老师了 总是提问题…

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

1回答

ustbhuangyi 2019-12-13 13:36:08

 diff 这块在后面讲组件更新的章节有提到,它会区分几种情况,新旧节点不同、新旧节点相同,相同的情况,会执行 updateChildren 过程,又会分几种情况去做更新,具体的建议你学到对应的章节再仔细去看,原则上它已经是根据这种 diff 算法得出的最优 DOM 操作。至于 documentFragment 通常是用于批量处理 DOM 操作用的。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信