本章主要搞懂在通過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介面!(這裡只需要知道它是這麼建立的就行了)
由於這個比較重要,所以我單獨抽出來作為一篇文章來記錄。。。