快速DIFF算法

97 阅读2分钟

1,在快速DIFF算法中,会先对需要比较的代码做预处理,预处理分为四步,第一步,对前置元素与后置元素做KEY比较,如果KEY算等则进行元素更新,并设置新旧两组元素的索引位置,在前置比较中通过一个变量去递增获取前置KEY相同的元素,后置比较中设置新旧两组元素的结束位置,然后递减,这么做是为了防止有新增元素或者需要移除的元素,然后判断如果前置变量的大于旧节点的结束位置并且小于等于新节点的结束位置,说明有新节点产生,进行挂载操作,如果前置节点的位置大于新节点的结束位置并且小于等于旧节点的的结束位置,进行元素卸载操作,第二步判断DOM是否需要移动,新建一张数组索引表并填充为-1其长度为新节点中前置与后置比较未成立的值,新建一张对象索引表,对象索引记录所有新节点的KEY与值,然后通过值去旧节点中的KEY去找,如果找到说明需要更新,并将值填充到数组索引表中的其索引位置为新节点的位置,而值为旧节点中的位置,这样一个数组就记录了新旧两组节点需要移动的位置,再添加一个判断如果索引与值程递增状态则不需要做移动操作,如果没有找到则需要卸载元素,判断更新的数据大于需要更新数据量进行卸载操作,如果需要进行移动操作,计算数组索引中的递增子序列,递减数组索引表,如果值为-1则进行挂载操作,如果值为递增子序列中的最后一个则使递增子序列最后一个值减1,此时不需要做位置操作,否则进行位移操作,其元素位置为当前索引加上新节点的开始位置