vue-vue构建版本runtime-compiler和runtime-only的区别

  构建vue项目会有两个版本进行选择,runtime-compiler和runtime-only;他们主要的不同体现在一个文件里面,main.js,下面看看两种的区别:

 

   一眼就看可以看出代码上的区别了;但要讲的并不是这个,要说的是他们执行流程的区别:

  runtime-compiler的执行流程是:template会被解析成ast(抽象树结构),然后编译成render函数,再转换为虚拟DOM,再变成真实DOM;即过程是 template->ast->render->vitualdom->UI

  runtime-only的执行流程是:render函数转换为虚拟DOM,再变成真实DOM;即过程是 render->vitualdom->UI

  区别很明显,runtime-compiler多了前两个步骤,runtime-only没有,这就导致了两者主要2个区别:性能和代码量。

    性能:runtime-compiler低,runtime-only高

    代码量:由于runtime-only不需要再进行前两个步骤,因此他不需要再用vue-template-compiler去解析,所以少了一些解析的工具和代码

  但大家有两个疑问是:

    1. render函数是什么?h(App)是什么东西?

    2. runtime-only中也有template的代码,那不是也要前两个步骤吗?

  先说第一个问题,render函数的作用是创建和渲染页面的标签,其实上面写的是箭头函数以及参数h有点抽象了,准确的写法应该是下面:

render: function(creareElement){
  createElement(App)  
}

  参数h其实就是creareElement,他是一个函数,他的作用是创建标签;看下面的代码把:

 

   这是creareElement的普通用法,他的意思是创建一个h2标签,有class属性等于box,并且标签内容是Hello World和一个button标签

  creareElement还有一种用法就是传入一个组件,也就是createElement(App) ,就相当于创建App提供的模板标签了

  好了,到第二个问题; 为什么runtime-only中也有template的代码,那不是也要前两个步骤吗?答案是不需要的,这样说吧,在创建完runtime-only后,前面两个步骤相当已经执行过了,再说一遍,前面两个步骤已经执行过了,所以实际上去执行 h(App)的时候,App此时已经没有template了,template已经被渲染成render函数;

posted @ 2021-03-30 21:55  爱编程DE文兄  阅读(149)  评论(0编辑  收藏  举报