vue中Runtime-Compiler和Runtime-only的區別


一、選擇Runtime-Compiler和Runtime-only不同模式的時候main.js文件的區別

  

二.vue程序運行過程

 

 

 1.解析:

第一步,當把vue模板template傳給Vue實例的時候,vue內部會保存在options里面,第二部,進行解析,解析成ast(抽象語法樹),第三步會進行編譯,編譯成render函數,第四步render函數會生成虛擬dom樹,第五步,把虛擬dom樹渲染成真實dom ui

 

所以:runtime-compiler的執行步驟是template -> ast -> render -> vdom -> ui,runtime-only的執行步驟是 render -> vdom -> ui,顯然runtime-only的性能更高,代碼量更少

三、render函數詳解

1.render函數的作用

vue在使用模板創建頁面的時候,需要先通過一個渲染函數來創建虛擬dom樹,這個函數就是render函數。render函數內部有一個回調函數createElement(),這個函數的作用就是生成一個 VNode節點(虛擬dom),render 函數得到createElement() 創建的 VNode 節點之后,返回給 Vue.js 的 mount 函數,渲染成真實 DOM 節點,並掛載到根節點上。

2.render函數的用法

 

import Vue from 'vue' import App from './App' Vue.config.productionTip = false

/* eslint-disable no-new */ const cpn = { template: '<div>{{message}}</div>', data () { return { message: '我是組件的message' } } } new Vue({ el: '#app', // components: { App },
  // template: '<App/>'
  render: function (creatElement) { //回調函數creatElement
    //1.普通用法:creatElement('標簽名',{標簽屬性}, ['標簽里面顯示的內容'])
    return creatElement ('h2', {class: 'box'}, ['hello vue']) //2.傳入組件
    return creatElement (cpn) //這種寫法的好處:
    //如果把cpn傳給template的話它還要編譯成ast,這種寫法的話直接讓render函數生成虛擬dom,效率更高
 } })

 

 

3.思考:.vue文件里面的template是由誰處理的?

是由vue-tempalte-compiler解析

import Vue from 'vue' import App from './App.vue' Vue.config.productionTip = false console.log(App) //不包含任何template函數,而是一個render函數
new Vue({ render: h => h(App), }).$mount('#app')

打印這段代碼,結果如下:

 

 

 

 疑惑:

Runtime-Compiler創建的項目打印出來的結果也是這樣,為什么,難道打印之前內部已經解析好了?

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM