小程序底層架構(gòu)原理

在瀏覽器中的webapp是做不了監(jiān)控的,而wa的表現(xiàn)是半native app,半web app,而native app與web app和一個(gè)很重要的區(qū)別就是native app有自己的生命周期,在這之中,我們可以根據(jù)生命周期的不同時(shí)間段做出不同的調(diào)整,比如常駐內(nèi)存,防止被系統(tǒng)殺掉,系統(tǒng)后臺(tái)保存活度等等,而web app就沒有這回事了,僅僅能夠根據(jù)事件做出不同的調(diào)整,跟原生app比起來,體驗(yàn)就差了一些。基于此,wa當(dāng)然不會(huì)像web app一樣了,他需要有自己的生命周期。
  本質(zhì)上來說,wa還是運(yùn)行在瀏覽器模式中,而承載wa的系統(tǒng)就是微信,用微信來管理wa的生命周期。而微信,現(xiàn)在本身就是一個(gè)系統(tǒng)。

1.與h5頁面的區(qū)別

  • 運(yùn)行環(huán)境:小程序基于微信系統(tǒng),而 h5 的宿主環(huán)境是瀏覽器。所以小程序中沒有 DOM 和 BOM 的相關(guān) API , jQuery 和一些 NPM 包都不能在小程序中使用;
  • 系統(tǒng)權(quán)限:小程序能獲得更多的系統(tǒng)權(quán)限,如網(wǎng)絡(luò)通信狀態(tài)、數(shù)據(jù)緩存能力等;
  • 渲染機(jī)制:小程序的邏輯層和渲染層是分開的,而 h5 頁面 UI 渲染跟 JavaScript 的腳本執(zhí)行都在一個(gè)單線程中,互斥。所以 h5 頁面中長時(shí)間的腳本運(yùn)行可能會(huì)導(dǎo)致頁面失去響應(yīng)

2.雙線程的小程序

小程序的渲染層和邏輯層分別由 2 個(gè)線程管理:渲染層的界面使用了 WebView 進(jìn)行渲染,邏輯層采用 JsCore 線程運(yùn)行 JS 腳本。

image.png

1.在渲染層把 WXML 轉(zhuǎn)化成對(duì)應(yīng)的 JS 對(duì)象。
2.在邏輯層發(fā)生數(shù)據(jù)變更的時(shí)候,通過宿主環(huán)境提供的 setData 方法把數(shù)據(jù)從邏輯層傳遞到 Native,再轉(zhuǎn)發(fā)到渲染層。
3.經(jīng)過對(duì)比前后差異,把差異應(yīng)用在原來的 DOM 樹上,更新界面。

?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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