您的位置:首页 > 汽车 > 新车 > diff算法的流程

diff算法的流程

2024/10/5 23:14:21 来源:https://blog.csdn.net/yang295242361/article/details/140838996  浏览:    关键词: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算法具体做了什么?

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com