.net工程師學習vue的心路歷程(二)

本章主要搞懂在通過vue init webpack projectname 命令創建 vue 項目過程中有個選擇。即關於如何選擇:runtime+compiler和runtime+only。

現在我通過命令分別創建了這兩個不同的項目,那麼他們的主要區別點就是在main.js文件裡面

通過compiler創建的:

通過compiler創建的vue實例下是有一個App組件和一個template,那麼這個時候之前說過templat會替換掉index.html中div app掛載的標籤元素。

那麼它從創建到運行的這樣一個過程實際上是經歷了幾個最要步驟,什麼步驟呢?  

實際上它這一整個創建的vue實例中包括組件和template對象保存到vue底層的一個option裡面,保存後就會解析成一個抽象語法樹(abstract  syntax tree)然後通過編譯render進行渲染我們這些template,此時它應該渲染到的是一個虛擬DOM(實際上是虛擬DOM樹也是虛擬DOM節點),最後通過虛擬DOM樹渲染成我們一個真實的DOM,也就是瀏覽器中最終形成的元素標籤。

整個過程實際上是這樣的:

vm.option.template–>(抽象語法樹)ast–>render:function()–>虛擬DOM(virtual dom)–>真實DOM

通過only創建的:

對於這兩個的區別,這裡我可能口水話闡述比較多,見諒!

這裡主要就是only下的render的區別。

我們都知道render是渲染的意思,這裡的箭頭函數相當於:

render:function(h)
{
     return h(App)  
}

那麼這裡的render實際上就等於通過compiler創建的時候vue運行過程中的第三步。也就是通過only創建的時候整個vue運行過程不需要走第一步template的保存以及第二步抽象語法樹(ast)。那麼顯而易見,通過only創建的速度運行效率是比compiler要好的,而且創建出來的記憶體我沒記錯的話是少6kb的(實際上少的6kb就是沒了前兩步),所以打包起來也是比compiler創建的時候要小的。所以我們在區分這兩個的時候一般是選擇第二種only方式進行創建的。

還有一個就是這個render函數。我把h改成了createElement意思就是創建一個元素,實際上創建的元素就是我們最基礎的html標籤,字不過通過回調將整個app組件對象傳了過去,實際上渲染的還是App組件裡面的html標籤,它在這裡面已經給我們完成了這件事情,所以是不需要再去通過template以及抽象語法樹去渲染到UI介面!(這裡只需要知道它是這麼創建的就行了)

由於這個比較重要,所以我單獨抽出來作為一篇文章來記錄。。。