Vue中 Runtime + Compiler 和 Runtime-only 两种模式含义和区别详解

 更新时间:2023年06月07日 10:15:01   作者:webchang  
这篇文章主要介绍了Vue中 Runtime + Compiler 和 Runtime-only 两种模式含义和区别,结合实例形式详细分析了Vue中 Runtime + Compiler 和 Runtime-only 两种模式基本功能、原理、区别与相关注意事项,需要的朋友可以参考下

1. 问题描述

在使用 vue-cli 脚手架构建项目时,会遇到一个构建选项 Vue build,有两个选择,Runtime + CompilerRuntime-only ,如图所示
在这里插入图片描述

Runtime + Compiler: recommended for most users

运行程序+编译器:推荐给大多数用户

Runtime-only: about 6KB lighter min+gzip, but templates (or any Vue-specific HTML) are ONLY allowed in .vue files - render functions are required elsewhere

仅运行程序: 比上面那种模式轻大约 6KB,但是 template (或任何特定于vue的html)只允许在.vue文件中使用——其他地方用需要 render 函数

2. 两种模式的区别

  1. runtime-only 比 runtime-compiler 轻 6kb,代码量更少
  2. runtime-only 运行更快,性能更好
  3. runtime-only 其实只能识别render函数,不能识别template,.vue 文件中的template也是被 vue-template-compiler 翻译成了render函数,所以只能在.vue里写 template

有关vue中的render函数可以看这篇文章:vue中的render函数

3. 解释

两种模式生成的 脚手架 即(代码模板)主要区别在 main.js 中,其它基本上是一样的:
在这里插入图片描述
我们再看一张图:
在这里插入图片描述

runtime + compiler 中 Vue 的运行过程

对于 runtime-compiler 来说,它的代码运行过程是:template -> ast -> render -> virtual dom -> UI

  • 首先将vue中的template模板进行解析解析成abstract syntax tree (ast)抽象语法树
  • 将抽象语法树在编译成render函数
  • 将render函数再翻译成virtual dom(虚拟dom)
  • 将虚拟dom显示在浏览器上

runtime-only 中 Vue 的运行过程

对于 runtime-only来说,它是从 render -> virtual dom -> UI

  • 可以看出它省略了从template -> ast -> render的过程
  • 所以runtime-only比runtime-compiler更快,代码量更少
  • runtime-only 模式中不是没有写 template ,只是把 template 放在了.vue 的文件中了,并有一个叫 vue-template-compiler 的开发依赖时将.vue文件中的 template 解析成 render 函数。 因为是开发依赖,不在最后生产中,所以最后生产出来的运行的代码没有template

4. 总结

如果在之后的开发中,你依然使用template,就需要选择 Runtime + Compiler

如果你之后的开发中,使用的是.vue文件夹开发,那么可以选择 Runtime-only

补充

对Vue中 runtime-compiler 和 runtime-only 两种模式的理解

一、问题

在使用 vue-cli 脚手架构建项目时,会遇到一个构建选项 Vue build,有两个选项,Runtime + CompilerRuntime-only:

· Runtime + Compiler: recommended for most users

(运行程序+编译器:推荐给大多数用户)

· Runtime-only: about 6KB lighter min+gzip, but templates (or any Vue-specificHTML) are ONLY allowed in .vue files - render functions are required elsewhere

(仅运行程序: 比上面那种模式轻大约 6KB min+gzip,但是 template (或任何特定于vue的html)只允许在.vue文件中使用——其他地方用需要 render 函数)

其实构建时的英文解释已经很简洁清晰了,但是第一次看的话或者不了解英文可能还是会比较 懵逼

下面是对两种模式详细的比较与解释

二、区别

1、runtime-only 比 runtime-compiler 轻 6kb

2、runtime-only 运行更快

3、runtime-only 其实只能识别render函数,不能识别template,.vue文件中的也是被 vue-template-compiler 翻译成了

      render函数,所以只能在.vue里写 template

三、解释

1、两种模式生成的 脚手架 即(代码模板)其实区别只有在 main.js 中,其他都是一样的:

可以发现一个 是用 template + component 而另一个 则是 用 render 函数

2、render函数: h => h(App) :

具体的解释可以看我上一篇博文:

https://www.jb51.net/javascript/287639zan.htm

简单地说就是 h 函数就是 createElement 函数,用于创建 虚拟DOM

3、runtime + compiler 中 Vue 的运行过程:

(1)首先将vue中的模板进行解析解析成abstract syntax tree (ast)抽象语法树

(2)将抽象语法树在编译成render函数

(3)将render函数再翻译成virtual dom 虚拟dom

(4)将虚拟dom显示在浏览器上

4、runtime-only 更快的原因:

runtime-only比runtime-compiler更快,因为它省略了vue内部过程中的第一个过程,如果是runtime-compiler

那么main.js中就会出现template从而需要过程一导致增加了一个过程,同时增加了大小

而 runtime-only 模式中不是没有写 template ,只是把 template 放在了.vue 的文件中了

并有一个叫 vue-template-compiler的在开发依赖时将.vue文件中的 template 解析成 render 函数了

因为是开发依赖,不在最后生产中,所以最后生产出来的运行的代码没有template

相关文章

  • Vue鼠标点击事件和键盘事件举例详解

    Vue鼠标点击事件和键盘事件举例详解

    在Vue框架中我们经常需要绑定各种JS事件,如"点击事件"、"鼠标移动事件"、"键盘事件"等等,这篇文章主要给大家介绍了关于Vue鼠标点击事件和键盘事件的相关资料,需要的朋友可以参考下
    2024-01-01
  • Vue API中setup ref reactive函数使用教程

    Vue API中setup ref reactive函数使用教程

    setup是用来写组合式api,内部的数据和方法需要通过return之后,模板才能使用。在之前vue2中,data返回的数据,可以直接进行双向绑定使用,如果我们把setup中数据类型直接双向绑定,发现变量并不能实时响应。接下来就详细看看它们的使用
    2022-12-12
  • vue动态设置img的src路径实例

    vue动态设置img的src路径实例

    今天小编就为大家分享一篇vue动态设置img的src路径实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue中slot插槽作用与原理详解

    Vue中slot插槽作用与原理详解

    插槽slot可以说在一个Vue项目里面处处都有它的身影,比如我们使用一些UI组件库的时候,我们通常可以使用插槽来自定义我们的内容,这篇文章主要介绍了Vue3中slot插槽使用方式,需要的朋友可以参考下
    2022-09-09
  • vue脚手架搭建过程图解

    vue脚手架搭建过程图解

    vue脚手架是个好东西,能够快速搭建vue单页面应用,vue是基于node环境的,所以要先安装node。下面通过图文并茂的形式给大家介绍vue脚手架搭建过程图解,感兴趣的朋友一起看看吧
    2018-06-06
  • Vue实现virtual-dom的原理简析

    Vue实现virtual-dom的原理简析

    这篇文章主要介绍了Vue实现virtual-dom的原理简析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 关于Vue.js一些问题和思考学习笔记(1)

    关于Vue.js一些问题和思考学习笔记(1)

    这篇文章主要为大家分享了关于Vue.js一些问题和思考的学习笔记,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Vue 实现展开折叠效果的示例代码

    Vue 实现展开折叠效果的示例代码

    这篇文章主要介绍了Vue 实现展开折叠效果的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • vue组件间通信子与父详解(二)

    vue组件间通信子与父详解(二)

    这篇文章主要为大家详细介绍了vue组件间通信子与父的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • vue项目中使用mapbox地图切换底图的详细教程

    vue项目中使用mapbox地图切换底图的详细教程

    最近开始入坑前端mapbox地图,跟大家一起慢慢深入学习,下面这篇文章主要给大家介绍了关于vue项目中使用mapbox地图切换底图的详细教程,文中给出了详细的实例代码,需要的朋友可以参考下
    2023-04-04

最新评论