diff算法的流程

avatar
作者
猴君
阅读量:0

diff算法?

组件并不是真是的DOM节点,而是存在与内存中的一种数据结构,叫做虚拟DOM,只有当它真正插入文档中的时候才会真的变成DOM

React的设计时所有的DOM变动都先在虚拟的DOM上发生,然后再将实际变动的部分反映在真是DOM上。这就是DOM diff算法,它可以大大提升网页性能表现。

一:diff算法的作用域是什么?

diff算法存在patchChildren方法中,而patchChildren方法用在Flagment类型和element类型的vnode中。

  •  什么类型的vnode存在children?

element元素类型vnode和flagment碎片类型vnode

(什么是碎片?创建一个vue组件,它只有一个根节点。

<template><span></span><span></span></template>这样会报错。flagement的出现是虚拟的,根本不会在dom树中呈现。而vue组件的vue实例需要绑定到一个单一的DOM元素中。processFlagment用于处理Flagment类型的vnode)

  • patchChildren方法

1:patch每一个children vnode依次向下遍历

2:patchChildren方法根据是否存在key进行真正的diff或者直接patch

二:diff算法的作用?

diff算法的作用:在patch子vnode的过程中,找到新的vnode对应的老vnode,复用真是的DOM节点

如果没有diff算法:会浪费性能开销。因为没有diff算法,而是依次patch虚拟dom,那么稍微修改一下dom树,就会在patch过程没有一对正确的新老vnode,

老的vnode没有一个可以复用,就需要重新创造新的节点,浪费性能开销。

三:diff算法具体做了什么?

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!