Vue的虚拟DOM是什么

核心思想

虚拟DOM/Virtual DOM,是数据驱动视图的一种解决方案。核心思想:使用 js对象的形式来表现html的dom结构。

背景

由于现代网络和浏览器的发展,网页的内容也变得很复杂,ajax 诞生让用户可以在不刷新页面的条件下获取到数据。但是   新的数据的渲染需要操作dom,这个是比较耗性能的。所以人们想出来, 将dom转化成js也称为vdom,通过跑js程序,对比出来新vdom 和 老vodm,拿到需要更新变化的vdom,这样就可以通过dom操作,需要变化的内用。从而达到节省性能的目的。

简单来说,不再因为一部分的改动就把整体的dom重新渲染,通过筛选出来变动的内容,只渲染变动的内容。节省性能。

 vue VDom的简单例子

这个是一段 简单html dom元素

<li class="list">
    <a class="href-a"> 链接 </a>
</li>

 vue 中将其转化成vdom后变成(在vue中转化vdom对象, 还有很多属性,本文只是简单使用了三个,tag props children)

var vdom = {
  tag: 'li',
  props: {
    className: 'list',
  },
  children: [
    {
      tag: 'a',
      props: {
       className: 'href-a'
      },
      childern: ['链接']
    }
  ]
}

VNode详情

Virtual DOM是通过什么类表达的?

用Vnode 类来表达vdom, 在 vue中每一个元素或者组件都对应个vnode对象。

VNode 的数据结构,还包含了VNodeData 、VNode Directive VNodeComponentOptions 等数据结构。


(I) VNode 
VNode 用来描述DOM节点的主要信息,包括tag、text、elm、data、parent 、children等。

它主要有两种生成方式,一种是由普通DOM元素生成;另一种是由Vue组件生成这两种方式生成的VNode 对象的区别主要是在componentOptions 的值上,如果是普通DOM素生成的VNode 对象,该值为空。


(2) VNodeComponentoptions 
VNode 中componentOptions 属性的数据类型用来描述通过Vue组件生成VNode 对象的些组件相关参数,包括Ctor、propData 、listeners.、parent 、children 、tag等属性。


(3) VNodeData 
VNode 中data属性的数据类型用来描述VNode 包含的一些节点数据,包括slot、mstaticclass 、style 、class 、props 、attrs 、transition 、directives 等。


(4) VNodeDirective 
VNodeData 中directives 属性的数据类型用来描述VNode 存储的指令数据,包括name value oldvalue 等

Vnode 数据结构可以参考下图:

Virtual DOM库Snabbdom

Vue2.x内部使用的Virtual DOM就是改造的Snabbdom, 有兴趣的朋友可以自行了解。https://github.com/snabbdom/snabbdom.git

参考书籍《Vue.js权威指南》

相关推荐

  1. vue什么虚拟DOM

    2024-04-25 01:54:01       20 阅读
  2. 什么虚拟dom

    2024-04-25 01:54:01       20 阅读
  3. 虚拟DOM什么以及React 和Vue中有何区别

    2024-04-25 01:54:01       18 阅读
  4. 什么虚拟DOM,以及它在React中作用

    2024-04-25 01:54:01       20 阅读
  5. vue 虚拟DOM优劣说明

    2024-04-25 01:54:01       32 阅读
  6. vue虚拟DOM简答

    2024-04-25 01:54:01       24 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-25 01:54:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-25 01:54:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-25 01:54:01       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-25 01:54:01       20 阅读

热门阅读

  1. 安阳旅游地图

    2024-04-25 01:54:01       13 阅读
  2. vue组件render函数中作用域插槽使用方式

    2024-04-25 01:54:01       12 阅读
  3. react-native开发安卓端app

    2024-04-25 01:54:01       17 阅读
  4. 【PHP】PHP7中的引用计数

    2024-04-25 01:54:01       10 阅读
  5. Innodb 行锁的实现方式及在各隔离级别下的使用

    2024-04-25 01:54:01       15 阅读
  6. [leetcode] 2 的幂

    2024-04-25 01:54:01       12 阅读