vue的diff算法原理

这篇具有很好参考价值的文章主要介绍了vue的diff算法原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

diff 概念

vue基于虚拟DOM做更新,diff的核心就是比较两个虚拟节点的差异。
vue的diff算法是平级比较,不考虑跨级比较的情况。内部采用深度递归+ 双指针的方式进行比较

vue的diff算法原理

diff比较流程

  1. 先比较是否是相同节点 key tag (标识,标签名)
  2. 相同节点比较属性,并复用老节点(将老的虚拟dom复用给新的虚拟节点dom)
  3. 比较儿子节点,考虑老节点和新节点儿子的情况
      1. 老的没儿子,现在有儿子。直接插入新的儿子
      1. 老的有儿子,新的没儿子。直接删除页面节点
      1. 老的儿子是文本,新的儿子是文本,直接更新文本节点即可
      1. 老的儿子是一个列表,新的儿子也是一个列表 updateChildren – 核心的diff算法,化为数组比对
  4. 列表优化比较(对于列表的情况,updateChildren)

头头尾尾尾头头尾比对查找

头头

先看头指针和头指针,若相同则头指针同时往右移,直到上方的头尾重合遍历完成,把下方的D 直接拿上来
vue的diff算法原理

尾尾

如果头指针和头指针不一样,再看尾指针和尾指针,若相同则尾指针同时往左走,知道上方的头尾重合遍历完成,把下方的D直接拿上来
vue的diff算法原理

头尾

如果头指针和头指针不一样,且尾指针和尾指针不一样,再看头指针和尾指针,若相同则把头指针插到尾指针的后面,头指针往后移,尾指针往前移,—之后再按照 头头,尾尾,头尾,尾头,直到遍历完成
vue的diff算法原理

尾头

如果头指针和头指针不一样,且尾指针和尾指针不一样,头指针和尾指针不一样,,再看尾指针和头指针,若相同则把尾指针插到头指针的前面,尾指针往前移,头指针往后移,—之后再按照 头头,尾尾,头尾,尾头,直到遍历完成
vue的diff算法原理

比对查找

如果头头,尾尾,头尾,尾头都不成立,就会通过对比查找的方式,若下面的头指针的元素,在上面中存在,则会把上面元素的放到头指针前面,下面头指针往后移,上面头指针不变,–之后再按 头头,尾尾,尾头,头尾,对比查找,直到遍历完成
vue的diff算法原理

过程

vue的diff算法原理

与vue3的区别

vue采用的 最长递归序列法 来实现 diff 优化文章来源地址https://www.toymoban.com/news/detail-425073.html

到了这里,关于vue的diff算法原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 面试被问到vue的diff算法原理,我不允许你回答不上来

    diff 算法是一种通过同层的树节点进行比较的高效算法 其有两个特点: 比较只会在同层级进行, 不会跨层级比较 在diff比较的过程中,循环从两边向中间比较 diff 算法在很多场景下都有应用,在 vue 中,作用于虚拟 dom 渲染成真实 dom 的新旧 VNode 节点比较 diff 整体策略为:深度

    2023年04月12日
    浏览(38)
  • vue diff算法与虚拟dom知识整理(15) 终结篇,收尾新前到旧前全部不匹配情况

    我们现在就只需要处理最后一种情况了 我们在 updateChildren.js 在while中 的if最后加个 else 当他们都没哟匹配到的情况 我们现在在updateChildren.js最上面 定义一个空对象 叫 keyMap 参考代码如下 然后 在我们刚写的else中编写代码如下 简单说 我们判断 如果所有条件都不匹配 就先看看

    2024年02月08日
    浏览(35)
  • 云计算的基本概念术语说明和核心算法原理

    作者:禅与计算机程序设计艺术 云计算的基本概念是分布式处理、并行处理和网格计算的发展,是一种新兴的商业计算模型。它通过使计算分布在大量的分布式计算机上,而非本地计算机或远程服务器中,使得企业数据中心的运行更与互联网相似。云计算的核心算法原理包括

    2024年02月14日
    浏览(49)
  • AI 大模型 LLM 的基础概念、核心算法原理数学模型和发展历史及其应用领域

    LLM(Large Language Model)是一种大型自然语言处理模型,它基于深度学习技术,通过大规模预训练和微调的方式来完成各种自然语言处理任务。下面我们简要介绍 LLM 模型的发展历史以及应用领域。 在过去的几年中,许多研究人员不断地探索着更加高效的深度学习算法和模型架

    2024年02月10日
    浏览(45)
  • 虚拟dom及diff算法之 —— h函数和diff函数

    新虚拟dom和老虚拟dom进行diff算法(精细化比较),算出如何最小量更新,最后反映到真实dom上 diff是发生在虚拟dom上的 模板编译 虚拟dom如何产生 - 渲染函数(h函数) h函数产生虚拟节点(vnode) Dom节点: a href=\\\"https://www.baidu.com\\\"真实Dom/a 调用h函数: h(\\\'a\\\',{props:{href:\\\"https://www

    2024年02月06日
    浏览(41)
  • React Diff算法原理

    👉点此(想要了解Diff算法) Diff算法原理 React Diff算法是React用于更新虚拟DOM树的一种算法。它通过比较新旧虚拟DOM树的差异,然后只对有差异的部分进行更新,从而提高性能。 React Diff算法的原理如下: 逐层比较:React Diff算法会从根节点开始逐层比较新旧虚拟DOM树的节点。

    2024年02月11日
    浏览(36)
  • 十分详细的diff算法原理解析

    本文我们总结一下有关 diff算法 的相关内容和实现原理 开门见山,直接先给出大家 diff算法 的概念 diff算法 可以看作是一种对比算法,对比的对象是 新旧虚拟Dom 。顾名思义, diff算法 可以找到 新旧虚拟Dom 之间的差异,但 diff算法 中其实并不是只有对比 虚拟Dom ,还有根据对

    2023年04月08日
    浏览(34)
  • 前端(八)——深入探索前端框架中的Diff算法:优化视图更新与性能提升

    😊博主:小猫娃来啦 😊文章核心: 深入探索前端框架中的Diff算法:优化视图更新与性能提升 前端框架中的diff算法是一种比较两个虚拟DOM树之间差异的算法。在更新页面时,为了提高性能,前端框架通常会先生成新的虚拟DOM树,然后通过diff算法比较新旧虚拟DOM树的差异,

    2024年02月16日
    浏览(49)
  • Vue2 - diff 原理(动图演示)

    解释:对比新旧虚拟DOM树,完成对真实DOM的更新,这个对比差异的过程叫做 diff 。 Vue 会在内部的 patch 函数中完成该过程。 当组件创建时,或依赖的数据变化时,会运行一个特定的函数来做2件事: 运行 _render 函数生成新的 VNode tree(虚拟DOM树) 运行 _update 函数,传入新的

    2024年02月03日
    浏览(31)
  • 【vue】diff 算法详解

    diff算法是一种通过 同层的树节点 进行比较的高效算法         diff算法的目的就是找出新旧不同虚拟DOM之间的差异,使最小化的更新视图,所以 diff 算法本质上就是比较两个js对象的差异 特点         1. 比较只会在同层级进行,不会跨层级比较         2. 在diff比较的构成

    2024年02月02日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包