vue patch的过程
时间: 2023-10-12 08:00:24 浏览: 34
Vue框架通过Virtual DOM实现高效的页面渲染和更新。在数据发生改变时,Vue需要比较新旧Virtual DOM树的差异,然后只对有差异的部分进行重新渲染,这个过程就是patch。
下面是Vue的patch过程:
1. 首先比较新旧Virtual DOM树的根节点是否相同,如果不同则直接替换整个根节点,结束patch过程。
2. 如果根节点相同,则比较新旧节点是否为相同的节点类型。如果不同,则直接替换整个节点,结束patch过程。
3. 如果节点类型相同,则比较节点的属性和子节点。
4. 如果节点的属性不同,则更新属性。
5. 如果节点有子节点,则对子节点进行递归比较。
6. 如果旧节点有子节点而新节点没有,则删除旧节点的子节点。
7. 如果旧节点没有子节点而新节点有,则添加新节点的子节点。
8. 如果旧节点和新节点都有子节点,则对子节点进行diff比较,然后进行相应的修改、添加、删除等操作。
以上就是Vue的patch过程,它通过Virtual DOM实现了高效的页面渲染和更新。
相关问题
vue 中diff算法
Vue中的diff算法是用来比较新旧虚拟节点(VNode)的差异,并将差异应用到真实的DOM树上,以更新视图。Vue的diff算法采用了双指针的方式进行比较。
首先,Vue会用JavaScript对象结构表示DOM树的结构,并根据这个树构建一个真正的DOM树,插入到文档中。当状态发生变更时,Vue会重新构建一棵新的对象树。
然后,Vue会对新旧节点进行比较(diff),记录两棵树的差异。比较的方式是通过双指针,分别指向新旧节点的开头和末尾。根据节点的类型和属性进行比较,如果节点相同,则复用旧节点;如果节点不同,则创建新的真实节点。
在比较的过程中,Vue会记录差异,并将差异应用到第一棵树所构建的真正的DOM树上(patch),从而更新视图。
总结来说,Vue的diff算法通过比较新旧虚拟节点的差异,将差异应用到真实的DOM树上,以更新视图。这种算法可以高效地更新视图,减少不必要的DOM操作,提高性能。
#### 引用[.reference_title]
- *1* *2* *3* [vue中的diff算法](https://blog.csdn.net/weixin_43638968/article/details/112686317)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
vue2 diff路程
Vue.js的diff算法是用来比较新旧虚拟节点(VNode)的差异,并将差异应用到真实的DOM树上,以更新视图。具体的diff过程如下:
1. 用JavaScript对象结构表示DOM树的结构,并构建一个真正的DOM树,插入到文档中。
2. 当状态发生变更时,重新构建一棵新的对象树。
3. 对比新旧树的差异(diff),记录差异。
4. 将第二棵树所记录的差异应用到第一棵树所构建的真正的DOM树上(patch),从而更新视图。
在比较过程中,会根据节点的类型和属性进行判断和比较。如果节点类型相同且属性相同,则认为是相同的节点,直接复用旧节点。如果节点类型不同或属性不同,则认为是不同的节点,需要创建新的真实节点。
具体的比较方式是通过遍历新旧节点的子节点,按照顺序进行比较。如果发现相同的节点,则复用旧节点,并将旧节点的索引移动到下一个节点。如果发现不同的节点,则创建新的真实节点,并将新节点的索引移动到下一个节点。
总结来说,Vue.js的diff算法通过比较新旧虚拟节点的差异,将差异应用到真实的DOM树上,以实现高效的视图更新。
#### 引用[.reference_title]
- *1* *2* *3* [vue中的diff算法](https://blog.csdn.net/weixin_43638968/article/details/112686317)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)