1、什么是小程序
小程序是介于web網(wǎng)頁(yè)應(yīng)用和原生應(yīng)用的一種產(chǎn)物;小程序類(lèi)web,但不是HTML5;即用即走,隨手可得;擁有離線能力;基于微信跨平臺(tái)。
2、小程序架構(gòu)
(1)小程序主要模塊構(gòu)成
小程序自身分為兩個(gè)主要部分獨(dú)立運(yùn)行:view 模塊和 service 模塊。在開(kāi)發(fā)者工具中,它們獨(dú)立運(yùn)行于不同的 webivew tag 中。
view 模塊負(fù)責(zé)前端界面顯示,它由 wxml 和 wxss 轉(zhuǎn)換后代碼以及微信提供相關(guān)輔助模塊組成。 一個(gè) view 模塊對(duì)應(yīng)一個(gè) 頁(yè)面, 小程序支持同時(shí)多個(gè) view 存在。
service 模塊負(fù)責(zé)后臺(tái)邏輯,它由 js 代碼以及微信提供的相關(guān)輔助模塊組成。 一個(gè)應(yīng)用只有一個(gè) service 進(jìn)程,它同樣也是一個(gè)頁(yè)面。它在程序生命周期內(nèi)后臺(tái)運(yùn)行,service 模塊通過(guò)與 view 模塊實(shí)現(xiàn)不同但接口格式一樣的微信JSBridge 對(duì)象跟后臺(tái)通信。
上圖是微信小程序視圖層和邏輯層的結(jié)構(gòu)示意圖??梢钥吹剑?br />
視圖層和邏輯層分離,通過(guò)數(shù)據(jù)驅(qū)動(dòng),事件交互,不直接操作DOM;視圖層負(fù)責(zé)渲染頁(yè)面結(jié)構(gòu),邏輯層負(fù)責(zé)邏輯處理、數(shù)據(jù)請(qǐng)求、接口調(diào)用等。
視圖層與邏輯層通過(guò)數(shù)據(jù)data和事件event進(jìn)行通信,邏輯層提供數(shù)據(jù)給視圖層,視圖層通過(guò)綁定/捕獲事件發(fā)起交互讓邏輯層處理視圖使用WebView渲染,JS由JSCore(IOS)/ X5(Android) /nmjs(DevTool)渲染解析
(2)小程序模塊間通信
上圖是小程序模塊通信情況圖,可以清楚地看到視圖層及邏輯層之間的通信結(jié)構(gòu)。
3、小程序的生命周期
用一下實(shí)例來(lái)觀察頁(yè)面的生命周期:
由上圖可知,小程序由兩大線程組成:負(fù)責(zé)界面的視圖線程和負(fù)責(zé)數(shù)據(jù)、服務(wù)處理的服務(wù)線程,兩者協(xié)同工作,完成小程序頁(yè)面生命周期的調(diào)用。
(1)視圖線程有四個(gè)狀態(tài):
初始化狀態(tài):初始化視圖線程所需要的工作,初始化完成后向 “服務(wù)線程”發(fā)送初始化完成信號(hào),然后進(jìn)入等待狀態(tài),等待服務(wù)線程提供初始化數(shù)據(jù)。
首次渲染狀態(tài):當(dāng)收到服務(wù)線程提供的初始化數(shù)據(jù)后,渲染小程序界面,渲染完畢后,發(fā)送“首次渲染完成信號(hào)”給服務(wù)線程,并將頁(yè)面展示給用戶。
持續(xù)渲染狀態(tài):此時(shí)界面線程繼續(xù)一直等待“服務(wù)線程”通過(guò)界面數(shù)據(jù),只要收到就重新局部渲染,因此只要更新數(shù)據(jù)并發(fā)送信號(hào),界面就自動(dòng)更新。
結(jié)束狀態(tài):頁(yè)面被回收或者銷(xiāo)毀、應(yīng)用被系統(tǒng)回收、銷(xiāo)毀時(shí)觸發(fā)。
(2)服務(wù)線程五個(gè)狀態(tài):
初始化狀態(tài):此階段僅啟動(dòng)服務(wù)線程所需的基本功能,比如信號(hào)發(fā)送模塊。系統(tǒng)的初始化工作完畢,就調(diào)用自定義的onload和onshow,然后等待視圖線程的“視圖線程初始化完成”。
等待激活狀態(tài):接收到“視圖線程初始化完成”信號(hào)后,將初始化數(shù)據(jù)發(fā)送給“視圖線程”,等待視圖線程完成初次渲染。
激活狀態(tài):收到視圖線程發(fā)送來(lái)的“首次渲染完成”信號(hào)后,就進(jìn)入激活狀態(tài)既程序的正常運(yùn)行狀態(tài),并調(diào)用自定義的onReady()函數(shù)。此狀態(tài)下就可以發(fā)送界面數(shù)據(jù)給界面線程進(jìn)行局部渲染,更新頁(yè)面。
后臺(tái)運(yùn)行狀態(tài):如果界面進(jìn)入后臺(tái),服務(wù)線程就進(jìn)入后臺(tái)運(yùn)行狀態(tài),
結(jié)束狀態(tài):頁(yè)面被回收或者銷(xiāo)毀、應(yīng)用被系統(tǒng)回收、銷(xiāo)毀時(shí)觸發(fā)。