微信小程序線程運(yùn)行機(jī)制(雙線程通信+線程與生命周期)

序:

小程序的渲染層和邏輯層分別由 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è)面


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容