vue3 diff算法中的-双端 Diff + 最长递增子序列 讲解
一句话总结Vue3 Diff 双端比较快速复用 最长递增子序列最小移动 DOM目的在乱序节点中只移动最少 DOM实现最高效更新。1. 先搞懂Vue3 对比 Vue2 差在哪Vue2双端比较但乱序部分只能暴力 patch 或重建Vue3双端比较 最长递增子序列LIS→乱序节点也能做到最小 DOM 移动2. Vue3 Diff 完整流程4 步第一步头尾双端比较快速复用四个指针旧头、旧尾新头、新尾循环做 4 种判断旧头 ↔ 新头旧尾 ↔ 新尾旧头 ↔ 新尾旧尾 ↔ 新头命中一个就直接复用不移动 DOM。直到头尾都不相等退出双端比较。第二步处理剩下的“乱序节点”双端比不出来了剩下的就是乱序片段。流程把旧节点建立 key → index 映射遍历新节点看在旧里有没有没有 新建有 打上对应的旧索引得到一串旧节点的下标序列例如[2, 3, 1, 4]这串数字代表新列表顺序对应旧列表的位置。第三步求最长递增子序列 LIS对上面的下标序列求 LIS[2,3,1,4]的 LIS [2,3,4]LIS 意义面试核心最长递增 相对顺序不变、不需要移动的节点。剩下的 只需要移动这些节点就能拼成新顺序。第四步只移动非 LIS 节点LIS 里的节点不动其他节点插到正确位置→DOM 移动次数最少→性能最高3. 最长递增子序列到底干嘛用最关键它帮 Vue 找到哪些节点本来顺序就是对的不用动。剩下的节点只需要少量移动就能排好序。例子旧[A,B,C,D,E]新[A,C,B,E,D,F]乱序部分下标序列[1,2,4,3]LIS[1,2,4]→C、B、E 顺序本来就对→只需要移动 D这就是 Vue3 Diff 比 Vue2 快的核心。4. 面试满分回答直接背Vue3 Diff 分为双端比较和最长递增子序列LIS两个阶段。先双端头尾比对快速复用相同节点。比对不出时将新旧节点建立映射得到旧节点下标序列。对下标序列求LIS得到相对顺序不变、不需要移动的最长节点链。最终只移动非 LIS 节点实现DOM 操作最少、性能最优的乱序更新。5. 一句话封神版双端 Diff 解决快速复用LIS 解决最少移动Vue3 靠这一套实现了前端框架里理论最优的 DOM 更新策略。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2473869.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!