本篇文章尝试以形象的比喻图解diff算法实现的过程,希望能够让大家迅速了解diff的原理。
首先,我们先来理一下基本概念。
VNode:虚拟dom,采用js对象模拟真实dom结点。其实,操作真实dom结点非常昂贵,而虚拟dom只保留dom的一些关键属性,因而变得更加简洁。
diff算法:结合生命周期的图解,当编译完模板或绑定数据变动的时候,就会触发render和patch函数。该过程中,首先判断VNode是否存在,不存在就创建VNode类。然后,对新旧VNode进行一番比较,再渲染对应的真实dom。如何对比新旧VNode就涉及高效的diff算法。
同级比较:dom节点是一个树状结构,diff算法采用比较同一层级的节点。关于同级比较,下面的图可以清楚地进行解释。
文章就从patch函数开始,详细解析对比VNode节点的基本思想。