序:
小程序的渲染層和邏輯層分別由 2 個(gè)線程管理:-------> WebView 與appServer。
? ? ? 渲染層的界面使用了 WebView 進(jìn)行渲染 ?view線程負(fù)責(zé)解析渲染頁(yè)面(wxml,wxss文件)
? ? ? 邏輯層采用 JsCore ( appServer線程 )線程運(yùn)行 JS 腳本 負(fù)責(zé)運(yùn)行js。
下面分三點(diǎn)來(lái)講線程的運(yùn)行機(jī)制
? ?? ? 1: 線程 運(yùn)行環(huán)境與開(kāi)發(fā)環(huán)境
? ? ? ?2:雙線程之間的通信
? ? ? ?3:線程與生命周期
1:線程運(yùn)行環(huán)境與開(kāi)發(fā)環(huán)境
view線程:? ? ? ? ?ios:safari,Android:X5瀏覽器? ? ? ? ? ? ? ? ? 開(kāi)發(fā)工具:chrome
appServer線程:ios:JavaScriptCore,Android:X5內(nèi)核? ? ? 開(kāi)發(fā)工具:nwjs
2:雙線程通信------>線程和線程如何通信?------>view線程和appServer線程如何通信

view線程:渲染層中界面渲染相關(guān)的任務(wù)全都在 WebView 線程里執(zhí)行----->通過(guò)邏輯層代碼去控制? ? ? ? ? ? ? ? ? ?渲染哪些界面。一個(gè)小程序存在多個(gè)界面,所以渲染層存在多個(gè)WebView 線程
appServer線程:在邏輯層上----->執(zhí)行的都是有關(guān)小程序業(yè)務(wù)邏輯的代碼----->運(yùn)行js
雙線程通信:
? ??????Native分別在視圖層和業(yè)務(wù)邏輯層注入WeixinJSBridge,這樣視圖層和業(yè)務(wù)層可以與Native進(jìn)行通信
???????邏輯層和渲染層通過(guò)Native作為中介來(lái)處理或者轉(zhuǎn)發(fā)信息,
????????邏輯層發(fā)送網(wǎng)絡(luò)請(qǐng)求也經(jīng)由 Native 轉(zhuǎn)發(fā)。
線程與生命周期
界面渲染的整體流程
1:在渲染層將wxml文件與wxss文件轉(zhuǎn)成js對(duì)象,也就是虛擬的dom
2 邏輯層生成數(shù)據(jù),把數(shù)據(jù)與虛擬的dom相結(jié)合,得到真實(shí)的dmo,然后在交給渲染層渲染
3 當(dāng)有數(shù)據(jù)變化的時(shí)候,邏輯層負(fù)責(zé)更新數(shù)據(jù),js對(duì)象發(fā)生改變,這種改變方式采用的是diff算法進(jìn)行比較,只改變變化的部分
4 將更新的數(shù)據(jù),進(jìn)行反饋,再次得到虛擬的dmo中,從而更新頁(yè)面。
diff算法:
Diff算法的作用是用來(lái)計(jì)算出**VirtualDOM**中被改變的部分,然后針對(duì)該部分進(jìn)行原生DOM操作,而不用重新渲染整個(gè)頁(yè)面。
1、在渲染層將wxml文件與wxss文件轉(zhuǎn)化成js對(duì)象也就是虛擬DOM
2、在邏輯層將虛擬的DOM對(duì)象配合生成真實(shí)的DOM樹(shù),再交給渲染層渲染
3、當(dāng)數(shù)據(jù)變化時(shí),邏輯層提供更新數(shù)據(jù),js對(duì)象發(fā)生改變,用diff算法進(jìn)行比較
4、將更新的內(nèi)容反饋到真實(shí)的DOM樹(shù)中,更新頁(yè)面

