vue 程序执行的过程

首先是 vue 在 runtime-compiler 模式下进行执行的过程在这里插入图片描述

通过 runtime-compiler 创建的项目,会经过上述图片中的 vue 程序运行过程,但是用 runtime-only 创建的项目,会直接从 render 函数 将 挂载的 App 变成 virtual dom(虚拟dom),性能更加高效!而且 vue 的代码量更少!因此 runtime-only 小的 6KB 就是少了执行前两个步骤的代码。

让我们看下一下这两种不同的方法创建的 vue 项目中 main.js 文件的区别吧:
1、runtime-compilermain.jsAppcomponents 里面进行了注册,然后在 template 里面进行使用在这里插入图片描述

2、runtimer-only 的 main.js:没有进行注册 App ,而是进行了一个 render(渲染)函数在这里插入图片描述

下面我补充一下虚拟 DOM 相关的知识吧:

1、什么是虚拟 DOM?

  • 虚拟 DOM本质上就是一个普通的 JS 对象,用于描述视图的界面结构
  • 在 vue 中,每个组件都有一个 rende r函数,每个 render 函数都会返回一个虚拟 DOM 树,这也就意味着每个组件都对应一棵虚拟 DOM 树

2、为什么需要虚拟 DOM?

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

3、虚拟 DOM 是如何转换为真实 DOM 的?

  • 在一个组件实例首次被渲染时,它先生成虚拟 DOM 树,然后根据虚拟 DOM 树创建真实 DOM,并把真实 DOM 挂载到页面中合适的位置,此时,每个虚拟 DOM 便会对应一个真实的 DOM。
  • 如果一个组件受响应式数据变化的影响,需要重新渲染时,它仍然会重新调用 render 函数,创建出一个新的虚拟 DOM 树,用新树和旧树对比,通过对比,vue 会找到最小更新量,然后更新必要的真实 DOM 节点
  • 这样一来,就保证了对真实 DOM 达到最小的改动。

4、模板和虚拟 DOM 的关系?

  • vue 框架中有一个 compile 模块,它主要负责将模板转换为 render 函数,而 render 函数调用后将得到虚拟 DOM。
  • 编译的过程分两步:
    1、将模板字符串转换成为 AST(抽象语法树)
    2、将 AST 转换为 render 函数
  • 如果使用传统的引入方式,则编译时间发生在组件第一次加载时,这称之为运行时编译。
  • 如果是在 vue-cli 的默认配置下,编译发生在打包时,这称之为模板预编译。
  • 编译是一个极其耗费性能的操作,预编译可以有效的提高运行时的性能,而且,由于运行的时候已不需要编译,vue-cli 在打包时会排除掉 vue 中的 compile 模块,以减少打包体积
  • 模板的存在,仅仅是为了让开发人员更加方便的书写界面代码
  • vue 最终运行的时候,最终需要的是 rende r函数,而不是模板,因此,模板中的各种语法,在虚拟 DOM 中都是不存在的,它们都会变成虚拟 DOM 的配置
最后我对 render 函数做一点补充:

render: function(createElement) 在 render 方法中有一个 createElement 属性,就是上面中 render 里面的 h,它来自单词 hyperscript

这下面的两种写法是在 runtime-compiler 项目里面改写的,意味着其也可以用 render 函数来进行页面的渲染

1、普通写法:如下图解释,页面就会渲染出一个类名为 box 的 h2 标签,内容是 Hello Vue,之前的 #app 的标签就会被替换掉在这里插入图片描述
在这里插入图片描述

还可以在数组里面添加第二个参数,也可以是 createElement 函数
在这里插入图片描述
在这里插入图片描述

2、传入组件写法:还可以现在 vue 实例外部创建一个组件,然后通过 createElement 函数进行引用
在这里插入图片描述
在这里插入图片描述

同理,上面的导入的 App 也是一个组件,所以 render的运行原理就是通过引用组件进行页面的渲染在这里插入图片描述
在这里插入图片描述

下面的使用 runtime-only 进行的代码编写,来解释 App 组件在被调用进 main.js 的时候已经被编译成了 render 函数,就没有 template 了

这里我们打印一下 App 组件,表明:当导入(import)App 组件的时候,已经没有 template 了在这里插入图片描述
在这里插入图片描述

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
SpringBoot是一种基于Spring框架的快速开发Web应用程序的工具。而Vue是一种用于构建用户界面的渐进式JavaScript框架。将SpringBoot和Vue结合起来,可以轻松构建现代化的Web应用程序。 下面是SpringBoot整合Vue的执行过程: 1. 创建一个SpringBoot项目:可以使用Spring Initializr或者手动创建一个Maven项目。在pom.xml中添加SpringBoot和Vue的依赖。 2. 创建Vue项目:使用Vue的脚手架工具创建一个Vue项目。可以使用命令行或者Vue的GUI工具来创建。 3. 配置Vue项目:在Vue项目中,需要将API请求代理到SpringBoot服务器。在vue.config.js文件中添加以下代码: ``` module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:8080', ws: true, changeOrigin: true } } } } ``` 这段代码告诉Vue的开发服务器将所有以/api开头的请求代理到SpringBoot服务器的8080端口。 4. 编写代码:在Vue项目中,可以使用axios或者其他HTTP客户端库来发送API请求。在SpringBoot项目中,需要编写控制器和服务来处理这些请求。 5. 打包并运行:在Vue项目中,使用npm run build命令打包项目。将生成的dist目录的内容复制到SpringBoot项目的src/main/resources/static目录下。在SpringBoot项目中,使用mvn spring-boot:run命令运行应用程序。 6. 访问应用程序:在浏览器中访问http://localhost:8080即可访问应用程序。 以上就是SpringBoot整合Vue的执行过程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉爽爽爽爽爽爽爽爽爽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值