Vue2:
使用了一种基于哈希表的算法来追踪和比较虚拟DOM结点的变化,而哈希表只能通过字符串或者数字来进行快速的查找和匹配。
Vue3:
引入了一种新的虚拟DOM算法,称为Fragment Identifier(片段标识符)算法。这个算法允许key可以实对象或者数组类型,而不仅仅限于字符串或数字。
Vue3中的Fragment Identifier算法是如何确保节点唯一性和比较的?
唯一性:
- Vue3的Fragment Identifier(片段标识符)算法使用
对象内部唯一标识符(Symbol或者__v_skip属性)来确保节点的唯一性 - 当Vue3渲染组件时,他会为每个节点生成一个唯一的标识符,并将其与节点关联起来,通过使用这些标识符,Vue3可以准确的识别和比较不同节点之间的差异。
节点比较:
- 当Vue3重新渲染组件时,他会使用Fragment Indentifier算法来比较新旧节点之间的差异
- Vue3会根据节点的唯一标识符来确定节点是否发生了变化,如果节点的唯一标识符不同,Vue 3会认为节点发生了变化,会重新渲染该节点及其子节点。
性能优化:
- 由于Vue 3的Fragment Identifier算法可以准确地识别节点的变化,它可以避免不必要的重新渲染,从而提高性能。
- 当组件中的节点发生变化时,Vue 3只会重新渲染发生变化的节点及其子节点,而不会重新渲染没有发生变化的节点。
- 这种精确的节点比较和渲染优化可以减少不必要的计算和DOM操作,提高应用程序的性能和响应速度。