在瀏覽器中的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 樹上,更新界面。