关于 tag 和 key 我可不可以这么理解
来源:4-9 虚拟DOM-diff算法概述
起点丶
2021-06-04
- 课程里讲的
tag 和 key 相同 不再深度比较
我理解的意思是:不再像一般的没优化过的 diff 算法【时间复杂度为O(n^3)】那样, 不仅仅是相同节点比较,当节点相同时,还要不同节点进行比较
- 而优化过的 diff 算法【也就是用在前端的 , 如 vue react 以及 snabbdom,因为dom树无需过深去比较】,如果 tag 和 key 相同,说明是节点没变【也就是 旧
<div key='1'>children</div>
和 新<div key='1'>children</div>
是一样的没有更改】,就不用再拿 新的 div 和 旧的 div 的子元素 children节点 做比较,这其实是 优化后的 diff 算法原本的特性【只比较同级节点】 - snabbdom 的源码里边 tag 和 key 相同 还是会去 patch chilren元素,这里是正常的,并不是上边所说的 ‘深度比较’,他只是不去管这一对相同的节点,而是去比较他们的 children 节点,所以这里并非是算法意义上的 ‘深度比较’
我看好多同学这里有疑问,我也是仔细琢磨了一遍才想明白,我的理解应该没问题吧?
写回答
1回答
-
双越
2021-06-04
没问题,非常棒!
而且这种把理解的内容写出来、分享出来的方式,也非常赞。既加深自己的理解,又惠及他人。
032022-07-08
相似问题