【react】react18的学习(十一)– 底层原理(一)之 diff 算法

diff算法、fiber链表

步骤:(追求多复用,快渲染)

  • 首次渲染,缓存虚拟dom或fiber链表(17及以后);

  • 组件更新,将新生成的虚拟dom与已有的真实dom的fiber链表对比;

  • 遵循同级对比、深度对比原则,先依次找节点对比;

  • 对比过程中,第一轮对比:按链表顺序对比,节点key值相同进一步比较标签、内容,并进行标记;

  • 当发现节点key不同时,则第一轮结束,开始从头开始第二轮对比;

  • 第二轮对比,是新的虚拟dom从第一轮中断的位置开始与fiber链表的map映射表对比;

  • 第二轮对比是以新虚拟dom的顺序从第一轮中断的位置开始依次进行,不是与映射表相同索引节点比较,而是去映射表找相同key值的节点比较,并给映射表的节点做相应标记;

  • 最多两轮后,依次得到:要删除的8、要更新的或复用的4(只内容不同或相同)、要移动位置的6、要新增的2,不变的不做标记;

  • 处理:要删除的、不变的和复用的、移动的、新增的;

相关推荐
wearegogog1232 小时前
基于 MATLAB 的卡尔曼滤波器实现,用于消除噪声并估算信号
前端·算法·matlab
Drawing stars2 小时前
JAVA后端 前端 大模型应用 学习路线
java·前端·学习
崇山峻岭之间2 小时前
Matlab学习记录33
开发语言·学习·matlab
品克缤2 小时前
Element UI MessageBox 增加第三个按钮(DOM Hack 方案)
前端·javascript·vue.js
小二·2 小时前
Python Web 开发进阶实战:性能压测与调优 —— Locust + Prometheus + Grafana 构建高并发可观测系统
前端·python·prometheus
小沐°2 小时前
vue-设置不同环境的打包和运行
前端·javascript·vue.js
科技林总3 小时前
【系统分析师】3.5 多处理机系统
学习
qq_419854053 小时前
CSS动效
前端·javascript·css
烛阴3 小时前
3D字体TextGeometry
前端·webgl·three.js
桜吹雪3 小时前
markstream-vue实战踩坑笔记
前端