首页 > 其他分享 >vue虚拟Dom详解

vue虚拟Dom详解

时间:2023-02-22 18:01:25浏览次数:47  
标签:vue render dom Dom 编译 虚拟 渲染 详解

1. 什么是虚拟dom?

虚拟dom本质上是一个js对象,用来描述视图的界面结构,在vue中,每个组件都有一个render函数,每个render函数都会返回一个虚拟dom树,这意味着每个组件都对应着一颗虚拟dom树

2. 为什么需要虚拟dom?
在vue中,渲染视图会调用render函数,这种渲染不仅发生在组件创建的时候,还发生在视图依赖的数据更新的时候,如果在渲染时,直接使用真实dom,由于真实dom的创建,更新,插入会带来大量的性能消耗,从而就会极大地降低渲染效率,因此,vue在渲染时,使用虚拟dom来替代真实dom主要是解决渲染效率的问题

3. 虚拟dom是如何转换为真实dom的?
每个组件实例首次被渲染时,首先会生成虚拟dom树,然后根据虚拟dom树创建真实dom,再把真实dom挂载到页面合适的地方,此时,每个虚拟dom树对应一个真实dom

当组件受响应式数据变化的影响,需要重新渲染,就会重新调用render函数,生成一个新的虚拟dom树,然后用新的虚拟dom树跟旧的虚拟dom树做比较,通过对比,vue会找到最小更新量,然后更新必要的虚拟dom节点,最后,这些更新过的虚拟dom节点,会去修改它们对应的真实dom,这样一来,就保证了真实dom的达到了最小的改动

4. 模板和虚拟dom的关系
vue框架中有一个compile,compile主要负责将模版转化为render函数,而render函数调用后得到虚拟dom树
编译的过程分两步:

将模版字符串转化给AST
将AST转化为render函数
如果是传统的引入方式,则编译时间发生在组件第一次加载的时候,称之为运行时编译

如果是在vue-cli的默认配置下,编译发生在打包时,称之为模版预编译

编译是个极其耗费性能的过程,预编译可以有效提高运行时的性能,而且,由于运行时不需要再编译了,这时的vue-cli会在打包时排除掉compile模块,以减少打包体积

模版的存在,仅仅是让开发人员更加方便的书写界面代码

vue最终运行的时候,最终需要的是render函数,而不是模版,因此,模版中的各种语法都不存在的,会被编译成虚拟dom的配置
————————————————
版权声明:本文为CSDN博主「是小松呀」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43266137/article/details/125304599

标签:vue,render,dom,Dom,编译,虚拟,渲染,详解
From: https://www.cnblogs.com/niufang/p/17145343.html

相关文章

  • VUE的生命周期
    Vue的生命周期Vue的生命周期是每个使用Vue框架的前端人员都需要掌握的知识,以此作为记录。Vue的生命周期就是vue实例从创建到销毁的全过程,也就是newVue()开始就是vue生命......
  • Vue如何渲染几千几万条数据(DOM)而不卡顿
    首先介绍原生的js渲染大量DOM会出现的问题和解决方法一、渲染大量DOM会出现的问题会出现较长的白屏事件。<html> <head> <title>渲染会卡的代码示例</title> </he......
  • Vue3从基础到精通
    目录一、Vue3介绍1.Vue3的变化2.Vue2和Vue3的不同之处二、Vue3创建项目1.用vue-lci创建步骤2.用vite创建步骤三、setup函数四、ref、reactive、toRefs五、计算属性和监听......
  • Vue3
    目录Vue3创建项目vite创建项目使用步骤setup函数ref和reactiveref使用方法reactive使用方法计算属性和监听属性计算属性监听属性生命周期toRefsvue后台模板介绍Vue3与vu......
  • 详解神经网络基础部件BN层
    摘要:在深度神经网络训练的过程中,由于网络中参数变化而引起网络中间层数据分布发生变化的这一过程被称为内部协变量偏移(InternalCovariateShift),而BN可以解决这个问题。......
  • vue+html5实现上传图片
    原理:dispatchEvent自定义触发事件,常用于自定义鼠标事件或点击事件,原生控件input打开上传文件方案:vue项目,点击自己的上传文件图标,通过dispatchEvent主动触发一个自定义......
  • Vue3项目相对Vue2发生的变化
    Vue3项目相对Vue2发生的变化Vue3简介性能的提升打包大小减少41%初次渲染快55%,更新渲染快133%内存减少54%源码的升级使用Proxy代替defineProperty实现响应式......
  • VUE大文件上传解决方案
    ​ 关键部分前端用file.slice()分块前端用FileReader获取每一分块的md5值后端用MultipartFile接受分块文件后端用FileOutputStream拼装分块文件话不多说,直接上代码,......
  • vue-day08——vue3介绍、vue3项目创建、setup函数、ref和reactive、计算属性和监听属
    目录一、vue3介绍1.性能的提升2.源码的升级3.拥抱TypeScript4.新的特性5组合式API和配置项API5.1OptionsAPI存在的问题5.2CompositionAPI的优势5.3组合式API和配置......
  • vue 08
    vue3的介绍它是vue项目的版本,现在一般的新项目使用的都是vue3,有的老的项目使用的还是vue2vue3的变化1.性能上的提升 打包的大小减少了41%初次渲染快了55%,更新......