小程序上線以來,一貫被稱爲「便攜版」的APP,關於二者之間的區別,無外乎小程序相對輕便、開發成本低,下面讓咱們來看一下小程序的「廬山真面目」!html
1、app的分類web
大體能夠分爲這3種:編程
native app(原生app)、web app、hybrid app(混合app),關係以下圖:json
2、什麼是小程序小程序
小程序是介於web網頁應用和原生應用的一種產物;api
小程序的特色:微信
3、小程序架構架構
視圖層和邏輯層分離,經過數據驅動,事件交互,不直接操做DOM併發
視圖層負責渲染頁面結構,邏輯層負責邏輯處理、數據請求、接口調用等app
視圖層與邏輯層經過數據和事件進行通訊,邏輯層提供數據給視圖層,視圖層經過綁定/捕獲事件發起交互讓邏輯層處理
視圖使用WebView
渲染,JS由JSCore(IOS)/X5(Android)/nmjs(DevTool)
渲染解析
JSBridge下架起上層開發與Native(系統層)的橋樑,使得小程序可經過API使用原生的功能,且部分組件爲原生組件實現,從而有良好體驗。實現了對底層API接口的調用,因此在小程序裏面開發,開發者不用太多去考慮OS的實現差別的問題,安心在上層的視圖層和邏輯層進行開發便可。
數據通訊機制:
分爲數據單項綁定、事件綁定。
4、小程序項目結構
約定優於配置(convention over configuration),也稱做按約定編程,是一種軟件設計範式,旨在減小軟件開發人員需作決定的數量,得到簡單的好處,而又不失靈活性。
5、小程序生命週期
小程序的生命週期分爲應用生命週期和頁面生命週期
應用生命週期:
屬性 | 類型 | 描述 | 觸發時機 |
---|---|---|---|
onLaunch | Function | 生命週期函數--監聽小程序初始化 | 當小程序初始化完成時,會觸發 onLaunch(全局只觸發一次) |
onShow | Function | 生命週期函數--監聽小程序顯示 | 當小程序啓動,或從後臺進入前臺顯示,會觸發 onShow |
onHide | Function | 生命週期函數--監聽小程序隱藏 | 當小程序從前臺進入後臺,會觸發 onHide |
Page()函數用來註冊一個頁面。接受一個 object 參數,其指定頁面的初始數據、生命週期函數、事件處理函數等。
object 參數說明:
屬性 | 類型 | 描述 |
---|---|---|
data | Object | 頁面的初始數據 |
onLoad | Function | 生命週期函數--監聽頁面加載 |
onReady | Function | 生命週期函數--監聽頁面初次渲染完成 |
onShow | Function | 生命週期函數--監聽頁面顯示 |
onHide | Function | 生命週期函數--監聽頁面隱藏 |
onUnload | Function | 生命週期函數--監聽頁面卸載 |
用Page 實例說明的頁面的生命週期
由上圖可知,小程序由兩大線程組成:負責界面的視圖線程(view thread)和負責數據、服務處理的服務線程(appservice thread),二者協同工做,完成小程序頁面生命週期的調用。
視圖線程有四大狀態:
服務線程五大狀態:
6、啓動方式
小程序啓動會有兩種狀況,一種是「冷啓動」,一種是「熱啓動」。 假如用戶已經打開過某小程序,而後在必定時間內再次打開該小程序,此時無需從新啓動,只需將後臺態的小程序切換到前臺,這個過程就是熱啓動;冷啓動指的是用戶首次打開或小程序被微信主動銷燬後再次打開的狀況,此時小程序須要從新加載啓動。
小程序冷啓動時若是發現有新版本,將會異步下載新版本的代碼包,並同時用客戶端本地的包進行啓動,即新版本的小程序須要等下一次冷啓動纔會應用上。 若是須要立刻應用最新版本,可使用 wx.getUpdateManager API 進行處理。