我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ReactDOMdiff对比VueDOMdiff区别详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ReactDOMdiff对比VueDOMdiff区别详解

React DOM diff 和 Vue DOM diff 的区别

React 是从左向右遍历对比,Vue 是双端交叉对比。

React 需要维护三个变量(我看源码发现是五个变量),Vue 则需要维护四个变量。

  • Vue 整体效率比 React 更高,举例说明:假设有 N 个子节点,我们只是把最后子节点移到第一个,那么
  • React 需要进行借助 Map 进行 key 搜索找到匹配项,然后复用节点
  • Vue 会发现移动,直接复用节点

React DOM diff 代码查看流程

  • 运行 git clone https://github.com/facebook/react.git
  • 运行 cd react; git switch 17.0.2
  • 用 VSCode 或 WebStorm 打开 react 目录
  • 打开 packages/react-reconciler/class="lazy" data-src/ReactChildFiber.old.js 第 1274 行查看旧版代码,或打开 packages/react-reconciler/class="lazy" data-src/ReactChildFiber.new.js 第 1267 行查看新代码(实际上一样) 发现react的源码很多的new和old文件,而且new和old代码几乎一模一样
发现比较经典的注释
// This algorithm can't optimize by searching from both ends since we
    该算法不能通过双端搜索来优化,因为我们
// don't have backpointers on fibers. I'm trying to see how far we can get
    不要在fibers上有反向指针。 我想看看我们能走多远
// with that model. If it ends up not being worth the tradeoffs, we can
    xxx 如果最终需要为此付出代价,我们可以
// add it later.
    以后添加它
// Even with a two ended optimization, we'd want to optimize for the case
    即使是双端优化,我们也要针对这种情况进行优化
// where there are few changes and brute force the comparison instead of
    哪里有一些变化和暴力比较而不是
// going for the Map. It'd like to explore hitting that path first in
    去拿Map。 它想要先探索这条路径
// forward-only mode and only go for the Map once we notice that we need
    仅向前模式,只有当我们注意到我们需要的时候才去找Map
// lots of look ahead. This doesn't handle reversal as well as two ended
    要向前看。 这并不能像处理两个端点那样处理反转
// search but that's unusual. Besides, for the two ended optimization to
    搜索,但这是不寻常的。 此外,对两端进行了优化
// work on Iterables, we'd need to copy the whole set.
    对于可迭代对象,我们需要复制整个集合。
// In this first iteration, we'll just live with hitting the bad case
    在第一次迭代中,我们将只处理这种糟糕的情况
// (adding everything to a Map) in for every insert/move.
    (添加一切到一个Map中)在每次插入/移动。
// If you change this code, also update reconcileChildrenIterator() which
    如果您更改了这段代码,还需要更新reconcileChildrenIterator() 方法
// uses the same algorithm.
    使用相同的算法。

总结

任性,这个算法不到万得以的情况不能像Vue一样使用双端优化,实在要优化的情况下,还要记得改一下别的方法哦,(我补充一句,改了new文件里面的,也要记得改old文件里面的哦)

忽略所有警告和报错,因为 React JS 代码中有不是 JS 的代码

折叠所有代码

根据 React 文档中给出的场景反复在大脑中运行代码

  • 场景0:单个节点,会运行到 reconcileSingleElement。接下来看多个节点的情况。
  • 场景1:没 key,标签名变了,最终会走到 createFiberFromElement(存疑)
  • 场景2:没 key,标签名没变,但是属性变了,最终走到 updateElement 里的 useFiber
  • 场景3:有 key,key 的顺序没变,最终走到 updateElement
  • 场景4:有 key,key 的顺序变了,updateSlot 返回 null,最终走到 mapRemainingChildren、updateFromMap 和 updateElement(matchedFiber),整个过程较长,效率较低

代码查看要点(忠告):

  • 声明不看(用到再看)
  • if 先不看(但 if else 要看)
  • 函数调用必看

以上就是React DOM diff 对比Vue DOM diff 区别详解的详细内容,更多关于React DOM diff区别Vue DOM diff 的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ReactDOMdiff对比VueDOMdiff区别详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

redis和mysql的区别对比

redis和mysql的区别:类型:redis是内存中键值存储,mysql是关系数据库管理系统。数据模型:redis支持多种数据类型,mysql支持关系数据模型。存储:redis数据存储在内存中,mysql数据存储在磁盘上。扩展性:redi
redis和mysql的区别对比
2024-04-19

html与xhtml对比有何区别

小编给大家分享一下html与xhtml对比有何区别,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!区别:XHTML元素必须被正确地嵌套,标签的嵌套顺序要正确。XHTML元素必须被关闭,即要有结束“”标签;而HTML中有
2023-06-14

Win8.1和Win10哪个好用 Win8.1与Win10系统的区别对比详解

2015年是Windows复兴年?微软今年即将推出的Win10操作系统对于微软的重要意义。Win10推动了微软帝国的崛起,但却为最终用户带来了进退两难的选择,例如:有的用户刚刚习惯Win8.1,那么是否需要升级到Win10呢?同样,Wind
2022-06-04

MongoDB和mysql的区别对比分析

MongoDB 是一个基于分布式文件存储的数据库,而MySQL 是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言紧密结合的数据库系统,本文重点给大家介绍MongoDB和mysql的区别,需要的朋友可以参考下
2023-01-31

unix和linux对比有什么区别

小编给大家分享一下unix和linux对比有什么区别,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!unix和linux的区别:1、UNIX是商业化的,而Linux是开源的,是免费、公开源代码的;2、UNIX系统大多是与硬件
2023-06-14

php与html对比有什么区别

这篇文章给大家分享的是有关php与html对比有什么区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。关系:PHP是HTML语言的一种升级形式,它的语言结构仍以HTML为核心;这么说吧,HTML是一张白纸,那么P
2023-06-06

.net和java对比有什么区别

小编给大家分享一下.net和java对比有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!“.net”致力于敏捷、快速开发和跨平台,可以用于开发C/S结构的
2023-06-14

vegas和pr对比有哪些区别

这篇文章给大家分享的是有关vegas和pr对比有哪些区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。区别:Vegas是由Sonic Foundry公司开发的;Pr是由Adobe公司开发的。vegas不论是对于专
2023-06-08

tmsi和iccid对比有哪些区别

这篇文章主要介绍tmsi和iccid对比有哪些区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!tmsi和iccid区别:1、Tmsi解锁时需要区分手机运营商版本,而Iccid解锁时则无需区分运营商版本;2、Tmsi
2023-06-14

php7和PHP5对比有什么区别

这篇文章主要介绍php7和PHP5对比有什么区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php7和PHP5对比的新特性和性能优化1. 抽象语法树(AST)AST在PHP编译过程作为一个中间件的角色,替换原来直接
2023-06-14

Ae和html对比有什么区别

这篇文章主要为大家展示了Ae和html对比有什么区别,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“Ae和html对比有什么区别”这篇文章吧。html有什么特点1、简易性:超级文本标记语言版本升级采
2023-06-06

关于synchronized、volatile、ReentrantLock的区别与对比

这篇文章主要介绍了关于synchronized、volatile、ReentrantLock的区别与对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-16

编程热搜

目录