main.js中render函数直接渲染与组件渲染区别
-
组件渲染 (runtime-compiler) 通过注册组件App,通过template进行渲染
import Vue from 'vue'
import App from './App'
Vue.config.productionTip = false
new Vue({
template: '<App />',
components: { App }
}).$mount('#app')
-
render函数渲染 (runtime-only) 通过render函数传入组件App直接渲染
import Vue from 'vue'
import App from './App'
Vue.config.productionTip = false
new Vue({
render: h => h(App)
}).$mount('#app')
上面两种写法的区别其实就是 runtime-compiler 与 runtime-only 的区别 想要了 runtime-compiler 与 runtime-only 的区别,首先需要知道Vue程序的运行过程,和理解 createElement函数。
1. Vue程序运行过程
runtime-compiler(v1)
runtime-only (v2) 性能更高,代码量更少
2. 理解createElement( ) 函数
- createElement( ) 函数可以传三个参数:标签、属性、内容
new Vue({
render: function (createElement) {
return createElement('h2', {class: 'box'}, ['hello,world'])
}
}).$mount('#app')
- createElement( ) 函数 高级用法,传入组件对象
const cpn = {
template: '<h2>{{msg}}</h2>',
data() {
return { msg: '我是组件cpn的msg' }
}
}
new Vue({
render: function (createElement) {
return createElement(cpn)
}
}).$mount('#app')
3. runtime-compiler 与 runtime-only 的区别(runtime-compiler 与 runtime-only 的演练过程 )
createElement() 既然能够传入组件,那就可以把App组件传入
new Vue({
el: '#app',
render: function (createElement) {
return createElement(App)
}
}).$mount('#app')
将 createElement 名字替换为 h ( vue源码中应该也是这么做的 )
这不就相当于 render: h => h(App) 了吗
new Vue({
el: '#app',
render: function (h) { return h(App) }
}).$mount('#app')
至此,这样就明白了 runtime-compiler 逐渐变成 runtime-only 的版本的演练过程 了,经过render函数,加快了编译,减少了vue运行中的代码量
配置 支持编译 template 模板
module.exports = {
runtimeCompiler: true,
}
|