1. 当数据发生变化时,vue是怎么更新节点的?

要知道渲染真实DOM的开销是很大的,比如有时候我们修改了某个数据,如果直接渲染到真实dom上会引起整个dom树的重绘和重排,有没有可能我们只更新我们修改的那一小块dom而不要更新整个dom呢?diff算法能够帮助我们。

我们先根据真实DOM生成一颗virtual DOM,当virtual DOM某个节点的数据改变后会生成一个新的Vnode,然后VnodeoldVnode作对比,发现有不一样的地方就直接修改在真实的DOM上,然后使oldVnode的值为Vnode

diff的过程就是调用名为patch的函数,比较新旧节点,一边比较一边给真实的DOM打补丁。

有点类似这样:

<div><p>123</p>
</div><script>
var Vnode = {tag: 'div',children: [{ tag: 'p', text: '123' }]
};
</script>// 在采取diff算法比较新旧节点的时候,比较只会在同层级进行, 不会跨层级比较。

vue的diff 算法相关推荐

  1. [vue] 你了解vue的diff算法吗?

    [vue] 你了解vue的diff算法吗? 我的理解:计算出虚拟 DOM 中真正变化的部分,并且只针对该部分进行 DOM 更新,而非重新渲染整个页面 个人简介 我是歌谣,欢迎和大家一起交流前后端知识. ...

  2. Vue中diff算法的理解

    Vue中diff算法的理解 diff算法用来计算出Virtual DOM中改变的部分,然后针对该部分进行DOM操作,而不用重新渲染整个页面,渲染整个DOM结构的过程中开销是很大的,需要浏览器对DOM结 ...

  3. 2.vue的diff算法(2020.12.07)

    在之前的生命周期中有提到过虚拟dom的相关概念,这里来简单介绍一个vue的diff算法的原理 1.virtual dom 无论是vue还是react,在更新渲染的过程中,都是先根据真实dom生成一个虚 ...

  4. vue的diff算法原理

    1. 为什么要用Diff算法 由于在浏览器中操作DOM是很昂贵的,频繁的操作DOM,会产生一定的性能问题,这就是虚拟DOM的产生原因.虚拟DOM本质上是JavaScript对象,是对真实DOM的抽象状 ...

  5. [Vue源码] Vue中diff算法原理

    一. Vue中diff算法原理 理解: 1.先同级比较,在比较子节点 2.先判断一方有儿子一方没儿子的情况 3.比较都有儿子的情况 4.递归比较子节点 图: 1.原节点:ABCD,新节点:ABCDE, ...

  6. 详解vue的diff算法

    前言 目标是写一个非常详细的关于diff的干货,所以本文有点长.也会用到大量的图片以及代码举例,一起来get吧. 先来了解几个点... 1. 当数据发生变化时,vue是怎么更新节点的? 要知道渲染真实 ...

  7. Vue之diff算法

    前言 Vue通过双向绑定来实现数据驱动视图更新,当数据更新会触发Dep对象notify通知所有的订阅者Watcher对象,Watcher对象最后会调用run来执行Watcher对象的getter方法. ...

  8. 【vue】diff 算法详解

    一.diff算法是什么 diff算法是一种通过同层的树节点进行比较的高效算法 diff算法的目的就是找出新旧不同虚拟DOM之间的差异,使最小化的更新视图,所以 diff 算法本质上就是比较两个js对象 ...

  9. VUE DIFF算法之快速DIFF

    VUE DIFF算法系列讲解 VUE 简单DIFF算法 VUE 双端DIFF算法 文章目录 VUE DIFF算法系列讲解 前言 一.快速DIFF的代码实现 二.实践 练习1 练习2 总结 前言 本节我 ...

最新文章

  1. C++中的常引用、常对象、常函数、常数据成员
  2. 检查Java中的字符串是空还是空[重复]
  3. Golang学习之GOROOT、PATH、GOPATH及go get
  4. AutoLayout全解
  5. TalkingData CTO肖文峰:研发工程师,你为啥升不上去?
  6. wxWidgets:wxMoveEvent类用法
  7. 平台服务器测试3—接口测试工具实现
  8. 连接fiddler后手机无法显示无网络
  9. python模块下载连接清华镜像的具体步骤_anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror...
  10. CentOS7 开机自启动脚本 chkconfig方式
  11. cahrt框架 ios_iOS - Charts(一) - BarChartView
  12. fpga加载程序慢_可重构计算:基于FPGA可重构计算的理论与实践 1.器件架构 译文(一)...
  13. 【PAT】1001 害死人不偿命的(3n+1)猜想
  14. 为type=file的input标签制定样式——CSS基础
  15. php限制密码输入错误次数,js密码输入错误指定次数禁止输入
  16. ISO27001认证步骤及证书年审
  17. C/C++编程:字符串拼接
  18. bada千字文应用程序简介
  19. 【NUC980开发板DIY项目大挑战】串口服务器
  20. 如何将火星坐标(高德、谷歌、腾讯地图坐标)转换为国家2000(或WGS84)坐标系?

热门文章

  1. Monthly Expense POJ - 3273(二分最大值最小化)
  2. echarts的x轴数量固定_联轴器 多节膜片式夹紧螺丝固定型 DAAPC(对应LK5CWP)
  3. 指标公式c语言源码下载,自用的一个不错的指标 (源码、附图、副图)
  4. linux变量转义,关于linux:在Bash变量中转义awk参数
  5. 【编译原理】第二章课后习题(王生原版)
  6. java poi 需要jar_Java 之 POI各Jar包作用
  7. linux音量模块,Linux下的音量控制器alsamixer
  8. php apache 配置文件,Linux下apache支持PHP配置文件的方法
  9. 数据结构-链表之单链表
  10. PADS 非常用操作 备忘