diff算法的流程

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算法具体做了什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值