京东的电子网站建设百度推广登录网站
web/
2025/10/7 4:22:34/
文章来源:
京东的电子网站建设,百度推广登录网站,商城网站怎么建设,wordpress弹幕播放器插件文章目录 React Diff算法一、它的作用是什么#xff1f;二、React的Diff算法1.了解一下什么是调和#xff1f;2.react的diff算法3.React Diff的三大策略4.tree diff#xff1a;1、如果DOM节点出现了跨层级操作#xff0c;Diff会怎么办? 5. component diff#xff1a;6. e… 文章目录 React Diff算法一、它的作用是什么二、React的Diff算法1.了解一下什么是调和2.react的diff算法3.React Diff的三大策略4.tree diff1、如果DOM节点出现了跨层级操作Diff会怎么办? 5. component diff6. element diff6. element diff 总结 React Diff算法 diff算法是虚拟DOM产生的一个概念用来计算出虚拟DOM中真正变化的部分并只针对该部分进行原生DOM操作而非重新渲染整个页面从而提高了页面的渲染效率。 一、它的作用是什么 渲染真实DOM的开销很大有时候我们修改某个数据时直接渲染到真实DOM上会引起整个DOM树的重绘和重排。我们希望只更新我们该的那么一小块DOM而不是整个DOMdiff算法就帮我们实现了这一点。 diff算法本质就是找出两个对象之间的差异目的是尽可能做到节点复用。 二、React的Diff算法
1.了解一下什么是调和 将virtualDOM虚拟DOM转换成actualDOM真实DOM的最少操作过程就叫调和简单理解就是简化算法复杂度。 2.react的diff算法 react的diff算法就是实现了上述的调和简化了算法的复杂度。 3.React Diff的三大策略 react用tree diff(树比较)、component diff组件比较、element diff元素比较三大策略将O(n^3)的复杂度转化为O(n)的复杂度 (1) 策略一tree diffWeb UI中DOM节点跨层级的移动操作特别少可以忽略不计。 (2) 策略二component diff拥有相同类的两个组件生成相似的树形结构拥有不同类的两个组件生成不同的树形结构。
(3) 策略三element diff对于同一层级的一组子节点通过唯一id区分。 4.tree diff
(1) React通过updateDepth对比Virtual DOM树进行层级控制。 (2) 对树分层比较两颗树只对同一层次节点进行比较。如果该节点不存在时则该节点及其子节点会被完全删除不会再进一步比较。 (3) 只需遍历一次就能完成整颗DOM树的比较。
1、如果DOM节点出现了跨层级操作Diff会怎么办? Tree Diff是对树的每一层进行遍历如果某组件不存在了则会直接销毁。 5. component diff
(1) 同一类型的两个组件按原策略(层级比较)继续比较Virtual DOM树即可。 (2) 同一类型的两个组件组件A变化为组件B时可能Virtual DOM没有任何变化如果知道这点可节省大量计算时间所以用户可以通过shouldComponentUpdate()来判断是否需要判断计算。 (3) 不同类型的组件将一个组件判断为dirtycomponent脏组件从而替换整个组件的所有节点。 注意如上图所示当组件D变为组件G时即使这两个组件结构相似一旦React判断D和G是不用类型的组件就不会比较两者的结构而是直接删除组件D重新创建组件G及其子节点。虽然当两个组件是不同类型但结构相似时进行diff算法分析会影响性能但是毕竟不同类型的组件存在相似DOM树的情况在实际开发过程中很少出现因此这种极端因素很难在实际开发过程中造成重大影响。
6. element diff
当节点处于同一层级时diff提供三种节点操作删除、插入、移动。 插入组件C不在集合(A,B)中需要插入。 删除
组件D在集合(A,B,D)中但D的节点已经更改不能复用和更新所以需要删除旧的D再创建新的。组件D之前在集合(A,B.D)中但集合变成新的集合(A,B)了D就需要被删除。
移动组件D已经在集合(A,B,C,D)里了且集合更新时D没有发生更新只是位置改变如新集合(A,D,B,C)D在第二个无需像传统DIFF让就集合的第二个B和新集合的第二个D比较并且删除第二个位置的B在第二个位置插入D而是添加唯一key进行区分移动即可。
(1)B不移动不赘述更新l astIndex1
(2)新集合取得 E发现旧不存在故在lastIndex1的位置 创建E更新lastIndex1
(3)新集合取得CC不移动更新lastIndex2
(4)新集合取得AA移动同上更新lastIndex2
(5)新集合对比后再对旧集合遍历。判断 新集合 没有但 旧集合 有的元素如D新集合没有旧集合有发现 D删除Ddiff操作结束。
6. element diff
基于tree diff
开发组件时注意保持DOM结构的稳定即尽可能少地动态操作DOM结构尤其是移动操作。当节点数过大或者页面更新次数过多时页面卡顿的现象会比较明显。这时可以通过 CSS 隐藏或显示节点而不是真的移除或添加 DOM 节点。
基于component diff
注意使用 shouldComponentUpdate() 来减少组件不必要的更新。对于类似的结构应该尽量封装成组件既减少代码量又能减少component diff的性能消耗。
基于element diff
对于列表结构尽量减少类似将最后一个节点移动到列表首部的操作当节点数量过大或更新操作过于频繁时在一定程度上会影响 React 的渲染性能。
总结
提示这里对文章进行总结 例如以上就是今天要讲的内容本文仅仅简单介绍了pandas的使用而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88279.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!