对于树结构和Diff算法的理解

首先Diff算法肯定是要对于虚拟dom进行操作的,如果不了解虚拟Dom,可以去搜一搜理解理解,虚拟dom生成真实dom的流程。
要知道渲染真实DOM的开销是很大的,比如有时候我们修改了某个数据,如果直接渲染到真实dom上会引起整个dom树的重绘和重排,有没有可能我们只更新我们修改的那一小块dom而不要更新整个dom呢?diff算法能够帮助我们。
我们先根据真实DOM生成一颗 virtual DOM ,当 virtual DOM 某个节点的数据改变后会生成一个新的 Vnode ,然后 Vnode 和 oldVnode 作对比,发现有不一样的地方就直接修改在真实的DOM上,然后使 oldVnode 的值为 Vnode 。
diff的过程就是调用名为 patch 的函数,比较新旧节点,一边比较一边给 真实的DOM 打补丁。
在前端的框架和document文档的Dom操作不难看出,前端很多的体系架构都是以树形的架构进行搭建的,包括组件化也是生成一个组件树,到最后在转化为真是的dom树,追本溯源,了解原因以后不难看出,组件中的结构也是树形的结构,如下图
对于树结构和Diff算法的理解_第1张图片
因此在操作虚拟dom的时候才会出现diff算法和优化diff算法的问题,如何去判断需要改变的树枝以及如何操作它才是diff算法所需要优化的地方
了解了概念详细的请看https://www.cnblogs.com/wangtong111/p/11198393.html

你可能感兴趣的:(对于树结构和Diff算法的理解)