Vue源码中子节点优化更新是如何改写的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1954个文字,预计阅读时间需要8分钟。
目录+前言+优化现有问题+优化策略分析+源码解析+小结+前言+Vue中更新节点,当新+VNode和旧+VNode都是元素节点且有子节点时,Vue会循环对比新旧+VNode的子节点数组,然后根据不同情况进行处理。
目录
- 前言
- 优化前存在的问题
- 优化策略分析
- 源码解析
- 小结
前言
Vue中更新节点,当新 VNode 和旧 VNode 都是元素节点且都有子节点时,Vue会循环对比新旧 VNode 的子节点数组,然后根据不同情况做不同处理。
虽然这种方法能解决问题,但是当更新子节点特别多时,循环算法的时间复杂度就会很高,所以Vue对此进行了优化。
优化前存在的问题
现在有新的 newChildren 数组和旧的 oldChildren 数组:
newChildren = ['a','b','c','d']; oldChildren = ['a','b','c','e'];
按照之前的解决方案:先循环 newChildren 数组,把第一个节点与 oldChildren 里的子节点逐一对比,再根据情况去处理。如果像上面的代码一样,前三个子节点都没有变化,只修改了最后一个子节点,但因为循环查找,还是要循环16次才能发现,所以前面做的15次循环全是无用功。
本文共计1954个文字,预计阅读时间需要8分钟。
目录+前言+优化现有问题+优化策略分析+源码解析+小结+前言+Vue中更新节点,当新+VNode和旧+VNode都是元素节点且有子节点时,Vue会循环对比新旧+VNode的子节点数组,然后根据不同情况进行处理。
目录
- 前言
- 优化前存在的问题
- 优化策略分析
- 源码解析
- 小结
前言
Vue中更新节点,当新 VNode 和旧 VNode 都是元素节点且都有子节点时,Vue会循环对比新旧 VNode 的子节点数组,然后根据不同情况做不同处理。
虽然这种方法能解决问题,但是当更新子节点特别多时,循环算法的时间复杂度就会很高,所以Vue对此进行了优化。
优化前存在的问题
现在有新的 newChildren 数组和旧的 oldChildren 数组:
newChildren = ['a','b','c','d']; oldChildren = ['a','b','c','e'];
按照之前的解决方案:先循环 newChildren 数组,把第一个节点与 oldChildren 里的子节点逐一对比,再根据情况去处理。如果像上面的代码一样,前三个子节点都没有变化,只修改了最后一个子节点,但因为循环查找,还是要循环16次才能发现,所以前面做的15次循环全是无用功。

