簡介
小程序的宿主環境(微信客戶端)爲了執行小程序的各種文件:wxml文件、
wxss文件、js文件,提供了小程序的雙線程模型
◼ 雙線程模型:
- WXML模塊和WXSS樣式運行於渲染層,渲染層使用WebView線程渲染(一個程序有多個頁面,會使 用多個WebView的線程)。
- **JS腳本(app.js/home.js等)**運行於邏輯層,邏輯層使用JsCore運行JS腳本。
- 這兩個線程都會經由微信客戶端(Native)進行中轉 交互。
界面渲染過程-wxml和DOM樹
界面渲染過程–初始化渲染
首先,我們需要知道,wxml等價於一棵DOM樹,也可以使用一個JS對象來模擬(虛擬DOM)
那麼,WXML可以先轉成JS對象,再渲染出真正的DOM樹
界面渲染過程–數據發生改變
通過setData把msg數據從“Hello World”變成“Goodbye”,產生的JS對象對應的節點就會發生變化,此時可以對比前後兩個JS對象得到變化的部分,然後把這個差異應用到原來的Dom樹上,從而達到更新UI的目的,這就是“數據驅動”的原理。
界面渲染的整體流程
界面渲染整體流程:
- 1.在渲染層,宿主環境會把WXML轉化成對應的JS對象;
- 2.將JS對象再次轉成真實DOM樹,交由渲染層線程渲染;
- 3.數據變化時,邏輯層提供最新的變化數據,JS對象發生變化比較進行diff算法對比;
- 4.將最新變化的內容反映到真實的DOM樹中,更新UI;