多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 一、 什么是虚拟dom Vdom因为是纯粹的JS对象所以操作他很高效,但是vdom的变更最终会装换成DOM的操作,为了实现高效的DOM操作,一套高效的虚拟DOM diff Diff算法 1. 原理 处理头部的同类型节点, 标记为已处理的节点 处理尾部的同类型节点 处理头部/尾头同类型的节点 处理新增的节点 处理更新的节点 1.循环 2.循环后处理 处理需删除的节点、 Diff分两部分 1. 第一部分是一个循环,循环内部是一个分支逻辑,每次循环只会进入其中的一个分支,每次循环会处理一个节点,处理之后将节点标记为已处理(oldVdom和newVdom都要进行标记,如果节点只出现在其中某一个vdom中,则另一个vdom中不需要进行标记),标记的方法有2种,当节点正好在vdom的指针处,移动指针将它排除到未处理列表之外即可,否则就要采用其他方法,Vue的做法是将节点设置为undefined。 2. 循环结束之后,可能newVdom或者oldVdom中还有未处理的节点,如果是newVdom中有未处理节点,则这些节点是新增节点,做新增处理。如果是oldVdom中有这类节点,则这些是需要删除的节点,相应在DOM树中删除之