MINA框架
小程序提供的開發(fā)框架為MINA框架贯城,它類似于淘寶Weex、Vue框架。MINA框架經(jīng)過大量底層的優(yōu)化設(shè)計,有著接近原生App的運行速度茸苇,對Android端和iOS端做到了高度一致的呈現(xiàn)传藏,具有完備的開發(fā)和調(diào)試工具。
MINA框架通過封裝微信客戶端提供的文件系統(tǒng)试幽、網(wǎng)絡(luò)通信、任務(wù)管理霍狰、數(shù)據(jù)安全等基礎(chǔ)功能抡草,對上層提供一整套JavaScript API,讓開發(fā)者能夠非常方便地使用微信客戶端提供的各種基礎(chǔ)功能與能力康震,快速構(gòu)建一個應(yīng)用。
小程序MINA框架示意圖:
通過框架圖我們可以看到兩大部分:
■在頁面視圖層,wxml是MINA提供的一套類似于HTML標(biāo)簽的語言以及一系列基礎(chǔ)組件。開發(fā)者使用wxml文件來搭建頁面的基本視圖結(jié)構(gòu)芦岂,使用wxss文件來控制頁面的展現(xiàn)樣式。
■AppService應(yīng)用邏輯層是MINA的服務(wù)中心决左,由微信客戶端啟用異步線程單獨加載運行。頁面渲染所需的數(shù)據(jù)婴渡、頁面交互處理邏輯都在AppService中實現(xiàn)幻锁。MINA框架中的AppService使用JavaScript來編寫交互邏輯、網(wǎng)絡(luò)請求柠并、數(shù)據(jù)處理岭接,但不能使用JavaScript中的DOM操作。小程序中的各個頁面可以通過AppService實現(xiàn)數(shù)據(jù)管理臼予、網(wǎng)絡(luò)通信鸣戴、應(yīng)用生命周期管理和頁面路由。
MINA框架為頁面組件提供了bindtap粘拾、bindtouchstart等事件監(jiān)聽相關(guān)的屬性窄锅,來與AppService中的事件處理函數(shù)綁定在一起,實現(xiàn)頁面向AppService層同步用戶交互數(shù)據(jù)缰雇。MINA框架同時提供了很多方法將AppService中的數(shù)據(jù)與頁面進(jìn)行單向綁定入偷,當(dāng)AppService中的數(shù)據(jù)變更時,會主動觸發(fā)對應(yīng)頁面組件的重新渲染寓涨。MINA使用Virtual-DOM技術(shù)盯串,加快了頁面的渲染效率。
框架的核心是一個響應(yīng)的數(shù)據(jù)綁定系統(tǒng)戒良,它讓數(shù)據(jù)與視圖非常簡單地保持同步体捏。當(dāng)做數(shù)據(jù)修改的時候,只需要在邏輯層修改數(shù)據(jù)糯崎,視圖層就會做相應(yīng)的更新几缭。
結(jié)構(gòu)層
邏輯層
微信小程序在邏輯層將數(shù)據(jù)進(jìn)行處理后發(fā)送給視圖層,同時接受視圖層的事件反饋沃呢。
視圖層
框架的視圖層由WXML(WeiXin Markup language)與WXSS(WeiXin Style Sheet)編寫年栓,由組件來進(jìn)行展示。于微信小程序而言薄霜,視圖層就是所有.wxml文件與.wxss文件的集合某抓。
數(shù)據(jù)層
數(shù)據(jù)層包括臨時數(shù)據(jù)或緩存、文件存儲惰瓜、網(wǎng)絡(luò)存儲與調(diào)用否副。
1.頁面臨時數(shù)據(jù)或緩存
在Page()中,我們要使用setData函數(shù)來將數(shù)據(jù)從邏輯層發(fā)送到視圖層崎坊,同時改變對應(yīng)的this.data的值备禀。
2.文件存儲(本地存儲)
使用數(shù)據(jù)API接口,如下所示:
■wx.getStorage:獲取本地數(shù)據(jù)緩存。
■wx.setStorage:設(shè)置本地數(shù)據(jù)緩存曲尸。
■wx.clearStorage:清理本地數(shù)據(jù)緩存赋续。
3.網(wǎng)絡(luò)存儲或調(diào)用
上傳或下載文件API接口,如下:
■wx.request:發(fā)起網(wǎng)絡(luò)請求另患。
■wx.uploadFile:上傳文件纽乱。
■wx.downloadFile:下載文件。
4.cookie
小程序中是沒有cookie的柴淘,為了兼容目前大部分Web App的登錄管理時使用cookie的迫淹,小程序在請求發(fā)送時,客戶端可以動態(tài)地給請求設(shè)置Header發(fā)送報文的cookie为严。實現(xiàn)代碼類似于如下代碼:
wx.request({
header: { cookie:‘xxx'},
url:"xxx", data:{},
success:function(res){},
fail:function(res){}
});
注意:
1).cookie本身不能在客戶端進(jìn)行讀寫敛熬。
2).storage對每個小程序的大小是5M,支持同步和異步第股。