类别:react / 日期:2023-01-06 / 浏览:235 / 评论:0

diff 算法是指生成更新补丁的方式,主要应用于虚拟 DOM 树变化后, 更新真实 DOM。所以 diff 算法一定存在这样一个过程:触发更新 → 生成补丁 → 应用补丁。

React 的 diff 算法,触发更新的时机主要在 state 变化与 hooks 调用之后。此时触发虚拟 DOM 树变更遍历,采用了深度优先遍历算 法。但传统的遍历方式,效率较低。为了优化效率,使用了分治的方 式。将单一节点比对转化为了 3 种类型节点的比对,分别是树、组 件及元素,以此提升效率。

树比对:由于网页视图中较少有跨层级节点移动,两株虚拟 DOM 树 只对同一层次的节点进行比较。

组件比对:如果组件是同一类型,则进行树比对,如果不是,则直接 放入到补丁中

元素比对:主要发生在同层级中,通过标记节点操作生成补丁,节点 操作对应真实的 DOM 剪裁操作。

以上是经典的 React diff 算法内容。自 React 16 起,引入了 Fiber 架构。为了使整个更新过程可随时暂停恢复,节点与树分别采用了 FiberNode 与 FiberTree 进行重构。fiberNode 使用了双链表的结 构,可以直接找到兄弟节点与子节点。整个更新过程由 current 与 workInProgress 两株树双缓冲完成。workInProgress 更新完成后, 再通过修改 current 相关指针指向新节点。-react

Vue 的整体 diff 策略与 React 对齐,虽然缺乏时间切片能力,但 这并不意味着 Vue 的性能更差,因为在 Vue 3 初期引入过,后期因 为收益不高移除掉了。除了高帧率动画,在 Vue 中其他的场景几乎 都可以使用防抖和节流去提高响应性能。-vue

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章

评论区

发表评论 / 取消回复

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。

«    2023年11月    »
12345
6789101112
13141516171819
20212223242526
27282930

最新留言