Vue2源码解析 虚拟dom简介
目录
1 什么是虚拟dom
2 为什么要引入虚拟dom
3 vue中的虚拟dom
4 总结
1 什么是虚拟dom
通过描述状态和dom之间的映射关系是怎样的,就可以将状态渲染成视图。
状态可以是js中的任意类型。Object、Array、String、Number、Boolean等都可以作为状态,这些状态最终会以段落、表单、按钮等元素呈现在用户界面上。
将状态作为输入,并生成dom输出到页面上显示出来,这个过程叫做渲染。
当某个状态发生变化时,只更新与这个状态相关联的dom节点。
虚拟dom的解决办法是:通过状态生成一个虚拟节点树,然后使用虚拟节点树进行渲染。在渲染之前,会使用新生成的虚拟节点树和上一次生成的虚拟节点树进行对比,只渲染不同的部分。
虚拟节点树其实是由组件树建立起来的整个虚拟节点树(vnode)。
2 为什么要引入虚拟dom
vue2.0开始选择用中等粒度的解决办法,那就是虚拟dom。组件级别是一个Watcher实例,就是说即使一个组件内有10个节点使用了某个状态,但其实也只有一个watcher在观察这个状态的变化。所以当这个状态发生变化时,只能通知到组件,然后组件内部通过虚拟dom去进行对比渲染。
3 vue中的虚拟dom
vue通过编译将模板转换成渲染函数(render),执行渲染函数就可以得到一个虚拟节点树,使用这个虚拟节点树就可以渲染页面,如下图所示。
为了避免不必要的dom操作,虚拟dom在虚拟节点映射到视图的过程中,将虚拟节点与上一次渲染视图所使用的旧虚拟节点做对比,找到真正需要更新的节点来进行dom操作,从而避免操作其它无任何改动的dom。
虚拟dom在vue中主要做了两件事:
1.提供与真实dom节点所对应的虚拟节点vnode;
2.将虚拟节点vnode和旧虚拟节点oldVnode进行对比,然后更新视图。
虚拟dom最核心的算法是patch。
4 总结
先建立虚拟节点再渲染视图,就可以将虚拟节点缓存,然后使用新创建的虚拟节点和上次渲染时缓存的虚拟节点进行对比,然后根据对比结果只更新需要更新的真实dom节点,从而避免不必要的do操作。
vue2采用中等粒度解决方案,状态更新只侦测组件,组件内部通过虚拟dom来渲染视图,这可以大大缩减依赖数量和watcher数量。
vue中通过模板来描述状态与视图之间的映射管旭,所以它会先模板编译成渲染函数,然后执行渲染函数生成虚拟节点,最后使用虚拟节点更新视图。
注:本文章来自于《深入浅出vue.js》(人民邮电出版社)阅读后的笔记整理
Vue2源码解析 虚拟dom简介相关推荐
- Vue2源码解析 虚拟节点VNode
目录 1 什么是VNode 2 VNode的作用 3 VNode的类型 3.1 注释节点 3.2 文本节点 3.3 克隆节点 3.4 元素节点 3.5 组件节点 3.6 函数式组件 ...
- Vue2源码解析 解析器
目录 1 解析器的作用 2 解析器内部运行原理 3 html解析器 3.1 运行原理 3.2 截取开始标签 3.3 截取结束标签 3.4 截取注释 3.5 截取条件注释 3.6 截取 ...
- Vue2源码解析 Object变化监听
目录 1 什么是变化监听 2 如何跟踪变化 3 何如收集依赖 4 依赖收集在哪 5 依赖是谁 6 什么是Watcher 7 递归侦测所有key 8 关于Object的问题 9 总结 1 ...
- h2o.ai源码解析(1)—项目简介
h2o.ai项目简介 参考h2o.ai官网中给出的项目定位是"open source platform for AI".相较于当前市面上的机器学习平台,h2o.ai的优势在于: - ...
- 【Vue3】源码解析
[Vue3]源码解析 首先得知道 Proxy Reflect Symbol Map和Set diff算法 patchChildren diff算法具体做了什么(重点)? patchKeyedChild ...
- Vue源码解析之Template转化为AST的实现方法
什么是AST 在Vue的mount过程中,template会被编译成AST语法树,AST是指抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree) ...
- 全网最全Skywalking8.9.1源码解析系列文章
1.本系列文档简介 本系列文章为研究Skywalking-OAP8.9.1版本, 探针Skywalking-java8.9.0时所著,文章内容来源有博客.官网.自己的体会.源代码剖析.测试所得.专业性 ...
- Vue源码解析:虚拟dom比较原理
通过对 Vue2.0 源码阅读,想写一写自己的理解,能力有限故从尤大佬2016.4.11第一次提交开始读,准备陆续写: 模版字符串转AST语法树 AST语法树转render函数 Vue双向绑定原理 V ...
- Vue2.0源码解析——编译原理
Vue2.0源码解析--编译原理 前言:本篇文章主要对Vue2.0源码的编译原理进行一个粗浅的分析,其中涉及到正则.高阶函数等知识点,对js的考察是非常的深的,因此我们来好好啃一下这个编译原理的部分. ...
最新文章
- 剑指offer_第7题_斐波那契数列
- Solution 1: BST转双向链表
- 神经网络结构与输出值之间的关系
- 百度视频携手神策数据 为用户精准推送短视频内容
- Javascript Patterns--读书笔记8 (Factory)
- Spring mvc HTTP协议之缓存机制
- Bootstrap组件1_字体图标
- 'unsigned char'-C编程中的声明,赋值和用法
- Vue中import引入模块路径时的@符号
- Java-标识符和关键字
- BZOJ 4518: [Sdoi2016]征途 [斜率优化DP]
- python用于数据处理真的那么强大嘛_为什么有那么多人选择Python,真的有那么好吗?...
- java配置环境变量为8后仍然显示为7_jdk7与jdk8环境共存与切换
- 【Python】@ 操作符
- spring-第十篇之XML Schema的简化配置,p、c、util命名空间
- 教妹学Java:数组打印最优雅的方式deepToString
- 如何拯救k8s镜像分发的阿喀琉斯之踵
- 丧尸的世界·《丧尸西游》
- 插画素材哪里找?5个超级实用的插画素材库推荐
- java eclipse sbt_SBT 构建scala eclipse开发