Vue模板編譯原理

2021-10-10 05:36:21 字數 1115 閱讀 4357

將模板字串轉成element ast

通過正則去匹配生成乙個 ast 樹

例如:

}

生成對應的ast

,

children: [

,attrslist: ,

attrsmap: {},

children: [}",

static: false,

expression: "_s(name)"}]}

]}

通過正則去匹配起始標籤生成對應的tag等資訊

通過乙個棧記錄乙個層級,用來記錄dom的深度

當解析到乙個 開始標籤 或者 文字,無論是什麼, stack 中的最後一項,永遠是當前正在被解析的節點的 parentnode 父節點標記靜態節點打上標記,靜態節點指dom不需要變的點

打上靜態節點有兩個好處

1.重新渲染的時候不需要重新生成

2.在虛擬dom打補丁的時候可以直接跳過

方法:1.遞迴遍歷樹給每個節點打上static標記,並確認是否是靜態節點

2.找出是否為靜態根節點

靜態節點: 1. type 為2

2. node.pre 為 true && node.hasbindings (/v-|@|^:/)不能為 true

&& 元素節點不能有 if 和 for屬性。

&& 元素節點不能是 slot 和 component

&& 元素節點不能是元件

&& 元素節點的父級節點不能是帶 v-for 的 template

element asts 生成 render 函式**字串

with(this)
_c 對應的是 createelement,它的作用是建立乙個元素。

第乙個引數是乙個html標籤名

第二個引數是元素上使用的屬性所對應的資料物件,可選項

第三個引數是 children

_v 的意思是建立乙個文字節點。

_s 是返回引數中的字串。

**生成器的總體邏輯其實就是使用 element asts 去遞迴,然後拼出這樣的 _c(『div』,[_c(『p』,[_v(_s(name))])]) 字串

Vue原理之模板編譯

模板內容 type text v model message div div vue指令碼 let vm new vue 複製 看到上面的 使用過vue的同學能知道頁面的渲染結果會如下圖所示 那他是如何進行渲染的呢,我們帶著問題來進入正題。class vue 複製 以上 就是對new vue時傳遞的...

Vue原理 十三 模板編譯

模板是什麼?模板不是html,有指令,插值 js表示式,能判斷 迴圈 html是標籤語言,只有js才能實現判斷 迴圈 圖靈完備的 因此,模板一定是轉換為某種js 即編譯模板 模板編譯在元件渲染過程中的作用 1 前置知識 with語法 const obj console.log obj.a 100 c...

vue模板編譯

vue 的模板編譯是在 mount的過程中進行的,在 mount 的時候執行了compile 方法來將 template 裡的內容轉換成真正的 html complie 最終生成 render 函式字串,等待呼叫。這個方法分為三步 parse解析 ast 的全稱是 abstract syntax t...