问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

React diff算法

发布网友 发布时间:2022-10-22 04:54

我来回答

1个回答

热心网友 时间:2024-11-04 11:07

react 作为一款最主流的前端框架之一,在设计的时候除了简化操作之外,最注重的地方就是节省性能了。diff算法就是为节省性能而设计的,diff算法和虚拟DOM的完美结合是react最有魅力的地方。其中,diff 是 different 的简写,这样一来,diff 算法是什么也就顾名思义了——找不同。

在DOM需要更新的时候,通过diff算法可以 计算出 虚拟DOM 中真正变化的部分,从而只针对变化的部分进行更新渲染,避免”牵一发而动全身“,造成性能浪费。

虽然完美地实现了找不同的功能,但是傻瓜式的循环递归对节点进行依次的对比,使其算法的时间复杂度为O(n^3),其中n是dom树的节点数。如果dom数足够大的话,这个算法将对cpu形成绝杀。

为了优化diff算法,react中对普通的diff算法实行了三大策略,成功将时间复杂度降为O(n)

tree diff 是diff算法的基础策略,它的重点在于同层比较

出于对diff算法的优化,react的tree diff对DOM节点的跨层级移动的操作忽略不计,react对Virtual DOM树进行层级控制,也就是说只对相同层级的DOM节点进行比较(即同一个父节点下的所有子节点)。对比时,一旦发现节点不存在,则直接删除掉该节点以及之下的所有子节点。这样秩序对DOM树进行依次遍历,就可以完成整个树的对比。时间复杂度为O(n)

一个疑问:既然tree diff忽略了跨层级移动的操作,如果这种情况出现了,diff算法会怎么处理呢?

答:不管,多了就新增,少了就删除(只有创建节点和删除节点的操作)。所以官方明确建议不要进行DOM节点的跨层级操作。

component diff是组件间的对比

在遇到组件之间的比较时,有三种策略

优化点:

element diff 是针对同一层级的element节点的

在双方同一层级的节点对比时,有三种情况

子节点更新时,会出现以下几种情况:

react中的key值,它不是给开发者使用的。在一般情况下key值是当我们在做子元素遍历的时候需要使用的。因为我们如果要进行数据的更新,就需要进行虚拟dom的对比,而key值就是每个元素节点对应的唯一值。这个时候就需要对比子元素的key值是否有匹配项,如果有的情况下则会进行数据的更新;如果key值没有匹配项,那么这个节点就需要进行删除和重新创建。

因此我们在遍历的时候千万不要用 index下标 或者 时间戳、随机数 等进行key值的赋值。这样会造成元素的移除重新创建浪费性能。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么是转动惯性量 我不愿让你一个人歌曲歌词 五月天教我打电话给我喜欢的人,我打了,可是他不接怎么办?他挂了我... 14个亚马逊站点你知道多少?亚马逊不同站点特点讲解! 亚马逊的站点有哪些?站点怎么选择? 千娇app如何下载安装,有哪些功能? ...浸没在水中称是3N,则石块受到的浮力是___N,排开的水的体积是___立 ... 在空气中用弹簧测力计测得某石块重5N;浸没在水中称量,弹簧测力计的示数... ...浸没在水中,测力计的示数为3N,则物体受到的浮力为 ...满水的溢水杯中时弹簧测力计的示数是3N,则石块受到的浮 40行代码实现React核心Diff算法 react原理三( diff算法) React的diff算法详解 炖鸡肉时,千万不要直接加水炖,多做这一步,鸡肉鲜嫩,没有腥味 垂涎录—辣子鸡丁 今年夏季流行什么样的女士凉鞋 你觉得哪道菜是真正的米饭杀手? 海尔张瑞敏在互联网提出智慧家庭的概念,这样家中的妻子可以有更多的时... 好用的小于30MB的 linux 系统有哪些?最好是简体中文的ISO镜像。有请附... 共享带宽的能通过路由器叠加吗 第五人格班有一个自定义大厅又换了一个自定义大厅怎么更换新的? 第五人格怎么更换大厅 腾讯课堂转跳不了 今年重庆师范大学涉外商贸学院的助学金。确切什么时候发呢?_百度知 ... 重庆师范大学的进! 重庆师范大学涉外商贸学院黑不黑啊?为什么这么早就放假了哦,其它院校... 重庆师范大学数学和计算机学院 09年什么时候放寒假? 武汉的身份证在南京可以办理吗 如何进入老师临时建立的群 微信临时群聊去哪里找 你知道吗 赴台证怎么办理 红精灵表显示1 ...血小板 未知待复诊 白细胞减少和血小板减少属于那种症状?_百度... 陶瓷轴承价格比普通轴承价格贵多少? 河源东埔中学2019录取分数? 哪里卖二手断桥铝设备 全套断桥铝门窗设备多少钱,二手断桥铝门窗 二手断桥铝门窗设备 3月份广元普通话考试什么时候在哪里报名? 按摩瘦腿是非常健康有效的瘦腿方法,瘦腿精油哪个牌子好用呢? 求这张重庆区位优势清晰图片 读“鞍钢和宝钢的区位图”,完成下列问题。 (1)鞍钢的区位优势是... ...地区发展水稻种植业的区位优势是 1.气候——— 2.地势— ...图中反映出鲁尔区工业发展的区位优势是: A.丰富的煤 读图,该区域发展大牧场放牧业的区位优势有 ( ) A.地广人稀,土地租金高... ...该种农业地域类型发展的主要区位优势是( )。 ①雨热同期②生产_百度... 意大利baci巧克力国内多少钱一罐啊 2017款,长安CS75 1.8T豪华版 表显行驶了3万公里,现在值多少钱 17款长安CS75 至享型 目前市场价在104800左右,但是听说一到过年就涨价... 我的华为电话手表上面的照片,不小心删除了,怎么才能找回来啊?