转载链接:https://www.cnblogs.com/camille666/p/vue_instance_prop_el_template_render.html

一、el,template,render属性优先性
当Vue选项对象中有render渲染函数时,Vue构造函数将直接使用渲染函数渲染DOM树,当选项对象中没有render渲染函数时,Vue构造函数首先通过将template模板编译生成渲染函数,然后再渲染DOM树,而当Vue选项对象中既没有render渲染函数,也没有template模板时,会通过el属性获取挂载元素的outerHTML来作为模板,并编译生成渲染函数。
换言之,在进行DOM树的渲染时,render渲染函数的优先级最高,template次之且需编译成渲染函数,而挂载点el属性对应的元素若存在,则在前两者均不存在时,其outerHTML才会用于编译与渲染。
1、写html文件

<div class="vapp-1">{{ info }}</div>
<div class="vapp-2">{{ info }}</div>
<div class="vapp-3">{{ info }}</div>

2、写js文件

new Vue({
el: '.vapp-1',
data: {
info: '这是通过el属性获取挂载元素的outerHTML方式渲染。'
},
template: '<div>这是template属性模板渲染。</div>',
render: function(h){
return h('div', {}, '这是render属性方式渲染。')
}
}) new Vue({
el: '.vapp-2',
data: {
info: '这是通过el属性获取挂载元素的outerHTML方式渲染。'
},
template: '<div>这是template属性模板渲染。</div>'
}) new Vue({
el: '.vapp-3',
data: {
info: '这是通过el属性获取挂载元素的outerHTML方式渲染。'
}
})

3、查看渲染结果
这是render属性方式渲染。
这是template属性模板渲染。
这是通过el属性获取挂载元素的outerHTML方式渲染。

二、独立构建和运行时构建
Vue.js 1.0,编译器需要依赖浏览器的DOM,所以无法将编译器和运行时分开。因此在Vue.js 1.0分发包中,编译器和运行时是打包在一起,都在浏览器端执行。
Vue.js 2.0,为了支持服务端渲染(server-side rendering),编译器不能依赖浏览器的DOM,所以必须将编译器和运行时分开。于是形成了独立构建(编译器 + 运行时)和运行时构建(仅运行时)。显而易见,运行时构建体积要小于独立构建。

1、模板编译器
模板编译器的职责是将模板字符串编译为纯JavaScript的渲染函数,即将<template>编译成render函数。
2、Vue.js的执行过程
包含编译过程和运行过程,在编译过程,编译器将字符串模板(template)编译为渲染函数(render)
在运行过程,调用渲染函数。
3、运行时构建
运行时构建指不能进行模板编译的Vue库。运行时构建不包含模板编译器,即不支持template选项,如果使用vue-loader和vueify预编译模板,只需要打包运行时,而不需要打包编译器。
运行时构建,可以用render选项,但它只在单文件组件中起作用,因为单文件组件的模板是在构建时预编译到render函数中,运行时构建只有独立构建大小的30%,只有16Kb min+gzip大小。

// 不需要编译器
new Vue({
render (h) {
return h('div', this.hello)
}
})

4、独立构建
独立构建指能够将template模板或者从el挂载元素提取的模板编译成渲染函数的Vue库,独立构建包含模板编译器,可以用template选项实时编译模板。

// 需要编译器
new Vue({
template: '<div>{{ hello }}</div>'
})

使用vue-cli生成项目时,会提醒使用哪种构建方式,npm包默认导出的是运行时构建,即runtime版本vue.runtime.common.js,如果想使用独立构建,需要在webpack.config.js中配置alias。

resolve: {
alias: {
vue: 'vue/dist/vue.js'
}
}

最新文章

  1. CRM客户关系管理系统 北京易信软科信息技术有限公司
  2. Python: 列表的基本用法
  3. Using Interface Builder记录
  4. python-推荐
  5. csharp: get Web.Services WebMethod
  6. Linux常用指令---netstat(网络端口)
  7. php中curl的详细解说(转载)
  8. DropdownListFor无法正确绑定值-同名问题
  9. python优秀库 - 使用envelopes发送邮件
  10. 图像特效——摩尔纹 moir
  11. 九度OJ 1010 A +B
  12. C#多线程编程序--聊聊线程
  13. 转://Linux Multipath多路径配置与使用案例
  14. JarvisOJ Misc 炫酷的战队logo
  15. php文件缓存方法总结
  16. centos7安装oracle的一些问题
  17. __autoload自动加载类
  18. 常用DOS指令备忘
  19. 以太坊go-ethereum客户端docker安装(二)开发(dev)环境搭建
  20. Linux命令下,cp,rm,mv命令的使用

热门文章

  1. C#类的一些基础知识(静态方法可以不用实例化调用)
  2. 【Java】 6.0 输入,输出和异常处理
  3. BUAA_OS lab3 难点梳理
  4. Linux 文件基本属性与目录管理 (chmod chown ls cp mv cat )
  5. shell 使用 cat 配合 EOF 创建文件并写入多行内容
  6. 004-Java中的运算符
  7. 关于GWAS的质量控制步骤顺序疑问?不同指导不同文献的建议各不相同。
  8. Django模板引擎
  9. ubuntu 缺少动态依赖库
  10. POJ2406 KMP前缀周期