iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >关于Vue虚拟dom问题
  • 590
分享到

关于Vue虚拟dom问题

2024-04-02 19:04:59 590人浏览 泡泡鱼
摘要

目录一、什么是虚拟dom?二、为什么需要虚拟dom三、虚拟dom是如何转换为真实dom的四、模板和虚拟dom的关系一、什么是虚拟dom? 虚拟dom本质上就是一个普通的js对象,用于

一、什么是虚拟dom?

虚拟dom本质上就是一个普通的js对象,用于描述视图的界面结构

在这里插入图片描述

Vue中,每个组件都有一个render函数,

在这里插入图片描述

没有render找template,没有template找el,有el就会把el.outhtml作为template,然后把这串字符串编译成render函数。
有template就不往下找了。有render同理。

在这里插入图片描述

每个render 函数都会返回一个虚拟dom树,这也就意味着每个组件都对应一棵虚拟DOM树。
也就是说render目的就是创建虚拟dom,这个组件到底要显示啥。
console.log(‘render'); ↓

在这里插入图片描述
在这里插入图片描述

题外:console.dir()可以显示一个对象所有的属性和方法。

在这里插入图片描述

如果没有return,这时候在页面中是不存在真实dom的。
加上return↓

在这里插入图片描述

h函数名字是自定义的,h函数结构,h(标签,{自身属性},[子元素])
子元素继续用h函数建,因为有别的属性
我们在[ ]里面再创建一个子元素

在这里插入图片描述

h函数做了判断,如果不是对象,就是文本节点了,↑认为是省略掉了中间的配置

在这里插入图片描述

在页面内渲染出来。
console.log(vnode);

在这里插入图片描述

h1子元素↓

在这里插入图片描述
在这里插入图片描述

通过.elm对应真实结点

h(‘h1','{{title}}')这种是肯定不行的,必须h(‘h1',this.title)

二、为什么需要虚拟dom

在vue 中,渲染视图会调用render 函数,这种渲染不仅发生在组件创建时,同时发生在视图依赖的数据更新时。如果在渲染时,直接使用真实 DOM ,由于真实DOM的创建、更新、插入等操作会带来大量的性能损耗,从而就会极大的降低渲染效率。
因此, vue 在渲染时,使用虚拟dom来替代真实dom,主要为解决渲染效率的问题。

生成真实dom在第一次加载的时候没有任何问题,因为无法避免,必要要生成真实dom。
render函数不止生成一次,它是每一次数据变化都要生成。
但是如果在render里用createElement每次都会生成全新的dom元素,开销太大了

三、虚拟dom是如何转换为真实dom的

在一个组件实例首次被渲染时,它先生成虚拟dom树,深度优先遍历结点,setAttribute,然后根据虚拟dom树创建真实dom,并把真实dom挂载到页面中合适的位置,直接替换掉div#app,此时,每个虚拟dom便会对应一个真实的dom。

在这里插入图片描述

是不等于的,因为直接替换掉了div#app

如果一个组件受响应式数据变化的影响,需要重新渲染时,它仍然会重新调用render函数,创建出一个新的虚拟dom树,用新树和旧树对比,通过对比,vue会找到最小更新量,然后更新必要的真实dom节点
这样一来,就保证了对真实dom达到最小的改动。

在这里插入图片描述

通过diff算法查看那两个虚拟dom是不一样的,然后去改动对应结点的真实dom完成效果,保证改动最少,提高效率

四、模板和虚拟dom的关系

在这里插入图片描述

脚手架搭的虚拟dom

vue框架中有一个compile模块,它主要负责将模板转换为render函数,而render函数调用后将得到虚拟dom。

编译的过程分两步,(babel和webpack都是这么创建的):

将模板字符串转换成为AST(抽象语法树,用树形结构描述我们的东西)将AST转换为render函数

AST↓,提一嘴AST用栈搭建的

在这里插入图片描述

如果使用传统的引入方式(src),则编译时间发生在组件第一次加载时,这称之为运行时编译。再提一嘴,第1步非常耗时。
如果是在vue-cli的默认配置下,编译发生在打包时,这称之为模板预编译。
编译是一个极其耗费性能的操作,预编译可以有效的提高运行时的性能,而且,由于运行的时候已不需要编译,vue-cli在打包时会排除掉vue中的compile模块,以减少打包体积

如果上面不写模板template

在这里插入图片描述
在这里插入图片描述

会报错,但是你可以在vue.config.js配置


module.export={runtimeCompiler:true}

不建议,会加入编译内容,使内容变多。(再提一嘴esbuild和vite加速打包,?没用过)

模板的存在,仅仅是为了让开发人员更加方便的书写界面代码
vue最终运行的时候,最终需要的是render函数,而不是模板,因此,模板中的各种语法,在虚拟dom中都是不存在的,它们都会变成虚拟dom的配置

在这里插入图片描述

等同于

在这里插入图片描述

案例:自动生成目录

现在需要制作一个组件,该组件可以根据其插槽中的内容,自动生成一个目录。

在这里插入图片描述
在这里插入图片描述

到此这篇关于关于Vue虚拟dom问题的文章就介绍到这了,更多相关Vue虚拟dom内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网

--结束END--

本文标题: 关于Vue虚拟dom问题

本文链接: https://www.lsjlt.com/news/123029.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 关于Vue虚拟dom问题
    目录一、什么是虚拟dom?二、为什么需要虚拟dom三、虚拟dom是如何转换为真实dom的四、模板和虚拟dom的关系一、什么是虚拟dom? 虚拟dom本质上就是一个普通的JS对象,用于...
    99+
    2024-04-02
  • 关于VM虚拟机(Finalshell的连接问题)
    关于VM虚拟机(Finalshell的连接问题) 以下为出现的问题汇总 (1)关于IP地址 (2)关于连接失败(多次显示输入密码) (3)关于ufw无法使用 (4)关于防火墙 (5)关于Finalsh...
    99+
    2023-09-05
    服务器 linux 运维
  • Vue虚拟Dom到真实Dom的转换
    再有一颗树形结构的Javascript对象后, 我们需要做的就是讲这棵树跟真实Dom树形成映射关系。我们先回顾之前的mountComponnet 方法: export funct...
    99+
    2024-04-02
  • vue 虚拟DOM快速入门
    目录虚拟 DOM 什么是虚拟 dom 虚拟 dom 的作用 vue 中的虚拟 dom vNode 什么是 vNode vNode 的类型 patch 新增节点 删除节点 更新节点 新...
    99+
    2024-04-02
  • Vue虚拟DOM详细介绍
    目录一、什么是虚拟DOM二、为什么需要虚拟DOM三、虚拟DOM介绍一、什么是虚拟DOM 虚拟DOM是对真是DOM的抽象,以JavaScript对象(VNode节点)作为基础的树,用对...
    99+
    2022-11-13
    Vue 虚拟DOM Vue 虚拟DOM原理
  • Vue虚拟Dom与真实Dom如何转换
    这篇文章主要讲解了“Vue虚拟Dom与真实Dom如何转换”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue虚拟Dom与真实Dom如何转换”吧!再有一颗树形...
    99+
    2024-04-02
  • Vue虚拟Dom到真实Dom的转换方法
    这篇文章主要介绍“Vue虚拟Dom到真实Dom的转换方法”,在日常操作中,相信很多人在Vue虚拟Dom到真实Dom的转换方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue虚拟Dom到真实Dom的转换方法...
    99+
    2023-06-20
  • Vue虚拟dom被创建的方法
    先来看生成虚拟dom的入口文件: ... import { parse } from './parser/index' import { optimize } from '...
    99+
    2022-11-13
    Vue虚拟dom Vue虚拟dom创建
  • vue如何实现虚拟dom的patch
    这篇文章主要为大家展示了“vue如何实现虚拟dom的patch”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何实现虚拟dom的patch”这篇文章吧。具...
    99+
    2024-04-02
  • vue中虚拟DOM的示例分析
    这篇文章主要介绍了vue中虚拟DOM的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。虚拟 DOM 优点:保证性能下限:&n...
    99+
    2024-04-02
  • vue虚拟Dom-render的源码解析
    这篇文章主要介绍“vue虚拟Dom-render的源码解析”,在日常操作中,相信很多人在vue虚拟Dom-render的源码解析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • 关于vue3编写挂载DOM的插件问题
    vue3 跟 vue2 相比,多了一个 app 的概念,vue3 项目的创建也变成了 // main.js import { createApp } from 'vue' imp...
    99+
    2024-04-02
  • 关于Tomcat虚拟路径访问本地图片失败的问题
    开发过程中,把图片放在本地一个磁盘的路径下。网上搜了下,可以使用tomcat虚拟路径访问本地图片。 这样就不用把图片放在整个项目的webapp目录下了。 1.找到tomcat的ser...
    99+
    2024-04-02
  • 关于VMware安装完后没有虚拟网卡的问题
    1 问题描述: 1.1  windows10首次安装VMware,或者非首次安装VMware时,安装后,没有出现如下图所示的虚拟网卡: 1.2  Xshell或者SecureCRT...
    99+
    2024-04-02
  • Vue源码分析之虚拟DOM详解
    为什么需要虚拟dom? 虚拟DOM就是为了解决浏览器性能问题而被设计出来的。例如,若一次操作中有10次更新DOM的动作,虚拟DOM不会立即操作DOM,而是将这10次更新的diff内...
    99+
    2024-04-02
  • vue中的虚拟dom知识点总结
    目录一、简介二、为什么VUE引入了虚拟DOM?三、vnode1.vnode的类型四、虚拟dom的核心——patch1.patch的过程新增节点删除节点更新节点...
    99+
    2024-04-02
  • 关于Java虚拟机HotSpot
    我们写的主类中的main()方法是如何被Java虚拟机调用到的?在Java类中的一些方法会被由C/C++编写的HotSpot虚拟机的C/C++函数调用,不过由于Java方法与C/C+...
    99+
    2024-04-02
  • 关于Vue-cli3烦人的eslint问题
    目录Vue-cli3烦人的eslint- 如果选择了是- 如果选择了否Vue-cli3的eslint报错解决方法Vue-cli3烦人的eslint 在vue-cli选择生成的时候,有...
    99+
    2024-04-02
  • 关于Vue 监控数组的问题
    目录常见面试题Vue 是如何追踪数据发生变化Vue 如何更新数组为什么有些数组的数据变更不能被 Vue 监测到Vue 为什么不能通过下标操作数组或者改变数组的长度来触发视图更新Vue...
    99+
    2024-04-02
  • Vue关于访问外链失败的问题
    目录Vue访问外链失败什么是 referrer ?隐私安全Vue打开一个外部连接总结Vue访问外链失败 在公司项目中,点击跳转外部链接时,发现跳转失败,但是在浏览器访问可以直接访问,...
    99+
    2023-03-11
    Vue访问外链失败 Vue访问外链 Vue外链访问
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作