美文网首页
怎么理解vue中的diff算法?

怎么理解vue中的diff算法?

作者: JJWANNA1 | 来源:发表于2020-04-12 17:11 被阅读0次
11.png
  • 源码分析1:必要性,lifecycle.js - mountComponent() 组件中可能存在很多个data中的key使用
  • 源码分析2:执行方式,patch.js - patchVnode() patchVnode是diff发生的地方,整体策略:深度优先,同层比较
  • 源码分析3:高效性,patch.js - updateChildren()

测试代码:

<!DOCTYPE html>
<html>
<head>
 <title>Vue源码剖析</title>
 <script src="../../dist/vue.js"></script>
</head>
<body>
   <div id="demo">
       <h1>虚拟DOM</h1>
       <p>{{foo}}</p>
   </div>
   <script>
   // 创建实例
     const app = new Vue({
           el: '#demo',
           data: { foo: 'foo' },
           mounted() {
           setTimeout(() => { 
               this.foo = 'fooooo'
           }, 1000); }
 });
 </script>
</body>
</html>

总结

1.diff算法是虚拟DOM技术的必然产物:通过新旧虚拟DOM作对比(即diff),将变化的地方更新在真 实DOM上;另外,也需要diff高效的执行对比过程,从而降低时间复杂度为O(n)。

2.vue 2.x中为了降低Watcher粒度,每个组件只有一个Watcher与之对应,只有引入diff才能精确找到 发生变化的地方。

3.vue中diff执行的时刻是组件实例执行其更新函数时,它会比对上一次渲染结果oldVnode和新的渲染 结果newVnode,此过程称为patch。

4.diff过程整体遵循深度优先、同层比较的策略;两个节点之间比较会根据它们是否拥有子节点或者文 本节点做不同操作;比较两组子节点是算法的重点,首先假设头尾节点可能相同做4次比对尝试,如果 没有找到相同节点才按照通用方式遍历查找,查找结束再按情况处理剩下的节点;借助key通常可以非 常精确找到相同节点,因此整个patch过程非常高效。

相关文章

  • 第十七天

    1.你怎么理解vue中的diff算法? diff算法是虚拟DOM技术的必然产物:通过新旧虚拟DOM作对比(即dif...

  • 怎么理解vue中的diff算法?

    源码分析1:必要性,lifecycle.js - mountComponent() 组件中可能存在很多个data中...

  • 你怎么理解vue中的diff算法

    diff算法不是vue专用 必要性,lifecycle.js - mountComponent() 执行方式,pa...

  • 你怎么理解vue中的diff算法?

    diff算法是虚拟 DOM 的必然产物,通过新旧虚拟 DOM 对比,将变化的地方更新在真实 DOM 上,另外也需要...

  • sammary

    vue-diff算法 react 性能优化 diff算法 ,局部更新DOMshouldComponentUpdat...

  • 理解vue2.x之diff算法

    了解diff算法前,应该先了解虚拟DOM(VNode),在vue中是先创建VNode,再通过diff算法看哪个节点...

  • Vue2.0的Diff算法

    原文:解析Vue2.0的Diff算法 Vue2.0加入了Virtual Dom,Vue的Diff位于patch.j...

  • VueDiff算法的简单分析和一些个人思考

    Diff算法是Vue视图动态改变的核心算法之一 本文包括对Diff算法的简单概括,和我闲的难受对Diff算法的一些...

  • 9. diff算法的理解

    diff算法的理解

  • 理解Vue2.5中diff算法

    vue是现在主流前端框架之一,采用了很多高级特性,如虚拟DOM,那么它是如何批量更新的,我们一起来了解下。 数据变...

网友评论

      本文标题:怎么理解vue中的diff算法?

      本文链接:https://www.haomeiwen.com/subject/nalbmhtx.html