首先Diff算法就是有两个虚拟DOM节点进行比较
以数组为例,我们在对数据进行增删改查的时候,数据发生了变动,我们如何知道它变动了什么东西呢
所谓的dom节点,我们可以理解为由数据映射而来的。
所以我们就以新的数据跟旧的数据进行比较,就能知道变动了什么。
笨的方法:一一比较
如下图:
A和A 比较,B和B比较,C和D比较,发现C和D不想等,删除C。以此类推:会发现4个节点不一样(D和E是需要删除的),需要操作4个节点。删除CF,插入DE,再删除DE
头尾法:
从开头进行比较,找到不同的点,记录为i,如上图i=2
从尾部开始比较,找到不同的点,记录为e1,如上图e1=3
那么就能得知:从下标i到e1的都是不相同的,需要删除。只需要操作两个节点就可以了:删除c和f
笨方法:一一比较,我们需要操作5次节点。其中替换c->f , d->g,e->c,新增de
当使用头尾算法不满足:删除(i>e2)、新增(i>e1)时,需要用到下面的方法:
提到头尾算法
对于中间这种乱序的 就是最长上升子序列