循环出新的虚拟DOM结构, 和旧的虚拟DOM结构对比, 尝试复用标签就地更新内容
1.什么是虚拟DOM ?
虚拟DOM本质是保存节点信息, 属性和内容的一个JS对象
2.为什么存储虚拟DOM?
因为真实DOM属性过多遍历耗时
3.虚拟DOM好处?
虚拟DOM的存在就是提高DOM更新的性能, 不用频繁操作真实DOM, 在内存中找到变化部分, 再更新真实DOM。
4.diff算法
浏览器渲染真实DOM的消耗是很大的,当我们修改了某个数据时,如果直接渲染到真实DOM上会引起整个dom树的重绘和重排,导致更新性能很低,用户体验很差,diff算法的过程是根据新旧DOM在内存中比较变化部分, 然后给真实DOM打补丁。
①同级比较根元素变化,整个dom树删除重建
②同级比较根元素不变,属性改变更新属性
5.v-for的key属性作用
①无key时最大限度尝试就地修改/复用相同类型元素,就地更新内容
②有key且值为索引时,先产生新旧虚拟DOM, 根据key比较, 还是就地更新
有key且值是唯一不重复的字符串或数字,基于key的来比较新旧虚拟DOM, 插入新的key元素或移除key不存在元素,不改变其他元素的内容
在使用v-for指令时,key属性值有id用id, 无id用索引,好处是可以配合虚拟DOM提高更新的性能
小结:
diff算法如何比较新旧虚拟DOM?
根元素改变——删除当前DOM树重新建
根元素未变——属性改变——更新属性
根元素未变——子元素/内容改变——无key – 就地更新 / 有key – 按key比较