代碼生命周期就是一個(gè)對(duì)象的生老病死,通常指程序從創(chuàng)建、開始、暫停、喚起、停止、卸載的過程。小程序的生命周期又可分為應(yīng)用生命周期和頁面的生命周期,先單獨(dú)分析,在結(jié)合兩者分析
應(yīng)用生命周期
應(yīng)用生命周期指得是小程序本身的初始化加載、方法以及最終被銷毀的過程。
在上面提到的前臺(tái)和后臺(tái),給出的解釋是:用戶點(diǎn)擊右上角關(guān)閉、按home健離開微信返回主頁,這些情況屬于小程序進(jìn)入后臺(tái)但沒有直接銷毀,只有在小程序進(jìn)入后臺(tái)一段時(shí)間,或者系統(tǒng)資源占用過高的情況才會(huì)被銷毀,就是說小程序的銷毀是需要額外的條件,而非是直接進(jìn)入后臺(tái)就銷毀;當(dāng)再次打開微信或打開小程序就稱為從后臺(tái)進(jìn)入前臺(tái);
頁面的生命周期
小程序的頁面生命周期是指程序內(nèi)部某個(gè)頁面從進(jìn)入到離開或某個(gè)頁面到另一個(gè)頁面的過程
wx.navigateTo跳轉(zhuǎn)狀態(tài)下,頁面A和頁面B的生命周期邏輯
應(yīng)用生命周期和頁面生命周期
開源框架
1、 mpvue
mpvue 是美團(tuán)點(diǎn)評(píng)開源的一個(gè)使用 Vue.js 開發(fā)小程序的前端框架??蚣芑?Vue.js 核心,mpvue 修改了 Vue.js 的 runtime 和 compiler 實(shí)現(xiàn),使其可以運(yùn)行在小程序環(huán)境中,從而為小程序開發(fā)引入了整套 Vue.js 開發(fā)體驗(yàn)。使用 mpvue 開發(fā)小程序,你將在小程序技術(shù)體系的基礎(chǔ)上獲取到這樣一些能力:
官網(wǎng):mpvue-docs
2、Tina.js
Tina.js 一款輕巧的漸進(jìn)式微信小程序框架。
特性: 輕盈小巧。 極易上手,保留 MINA (微信小程序官方框架) 的大部分 API 設(shè)計(jì);無論你有無小程序開發(fā)經(jīng)驗(yàn),都可以輕松過渡上手。 漸進(jìn)增強(qiáng),既有狀態(tài)管理器,也有路由增強(qiáng),還可以自己編寫插件。
3、Taro
Taro 是由京東 - 凹凸實(shí)驗(yàn)室打造的一套遵循 React 語法規(guī)范的多端統(tǒng)一開發(fā)框架。我要沒記錯(cuò)的話,是最近剛剛開源的。
使用 Taro,我們可以只書寫一套代碼,再通過 Taro 的編譯工具,將源代碼分別編譯出可以在不同端(微信小程序、H5、App 端等)運(yùn)行的代碼。同時(shí) Taro 還提供開箱即用的語法檢測和自動(dòng)補(bǔ)全等功能,有效地提升了開發(fā)體驗(yàn)和開發(fā)效率。
官網(wǎng):Taro - A set of multi-end development solutions that follow the React grammar specification.
4、wepy
WePY 是一款讓小程序支持組件化開發(fā)的框架,通過預(yù)編譯的手段讓開發(fā)者可以選擇自己喜歡的開發(fā)風(fēng)格去開發(fā)小程序??蚣艿募?xì)節(jié)優(yōu)化,Promise,Async Functions 的引入都是為了能讓開發(fā)小程序項(xiàng)目變得更加簡單,高效。
特性:
官網(wǎng):https://tencent.github.io/wepy
5、weweb
weweb 是一個(gè)兼容小程序語法的前端框架,你可以用小程序的寫法,來寫 web 應(yīng)用。如果你已經(jīng)有小程序了,通過它你可以將你的小程序運(yùn)行在瀏覽器中。
特性: 跨平臺(tái),一套代碼多端運(yùn)行(小程序、h5、未來直接打包成安卓、ios app 也不是夢) 自帶常用組件,完美繼承了小程序內(nèi)置組件 兼容小程序 rpx 語法,使頁面更容易適配各種機(jī)型
5、Touch WX
Touch WX 是一套完全免費(fèi)的微信小程序開發(fā)框架,包含豐富的 UI 控件用于官方組件的補(bǔ)充。
特點(diǎn)如下:
這套框架的原理是:
將 Touch WX 工程中所寫的代碼進(jìn)行編譯,直接輸出為微信小程序工程原始代碼。擴(kuò)充的 30 多種組件,完全是基于小程序官方的自定義組件機(jī)制實(shí)現(xiàn)(row&col 除外)。
所以它支持小程序的全部語法,怎么開發(fā)小程序,就怎么開發(fā) Touch WX。
不過因?yàn)槭菃挝募拈_發(fā)方式,在文件的代碼結(jié)構(gòu)上稍有不同。請(qǐng)注意這一點(diǎn)。
這樣好處在于:
組件庫
還有各種開源的組件庫,比如有以下這幾個(gè):
有贊的 zanui-weapp 和 iview 這兩個(gè)比較出名。
微信小程序的相關(guān)文件類型
注:
封裝微信小程序的數(shù)據(jù)請(qǐng)求
參數(shù)傳值的方法
提高微信小程序的應(yīng)用速度
小程序與原生App比較
程序除了擁有公眾號(hào)的低開發(fā)成本、低獲客成本低以及無需下載等優(yōu)勢,在服務(wù)請(qǐng)求延時(shí)與用戶使用體驗(yàn)是都得到了較大幅度 的提升,使得其能夠承載跟復(fù)雜的服務(wù)功能以及使用戶獲得更好的用戶體驗(yàn)。
微信小程序原理
微信小程序采用JavaScript、WXML、WXSS三種技術(shù)進(jìn)行開發(fā),從技術(shù)講和現(xiàn)有的前端開發(fā)差不多,但深入挖掘的話卻又有所不同。
JavaScript:首先JavaScript的代碼是運(yùn)行在微信App中的,并不是運(yùn)行在瀏覽器中,因此一些H5技術(shù)的應(yīng)用,需要微信App提供對(duì)應(yīng)的API支持,而這限制住了H5技術(shù)的應(yīng)用,且其不能稱為嚴(yán)格的H5,可以稱其為偽H5,同理,微信提供的獨(dú)有的某些API,H5也不支持或支持的不是特別好。
WXML:WXML微信自己基于XML語法開發(fā)的,因此開發(fā)時(shí),只能使用微信提供的現(xiàn)有標(biāo)簽,HTML的標(biāo)簽是無法使用的。
WXSS:WXSS具有CSS的大部分特性,但并不是所有的都支持,而且支持哪些,不支持哪些并沒有詳細(xì)的文檔。
微信的架構(gòu),是數(shù)據(jù)驅(qū)動(dòng)的架構(gòu)模式,它的UI和數(shù)據(jù)是分離的,所有的頁面更新,都需要通過對(duì)數(shù)據(jù)的更改來實(shí)現(xiàn)。
小程序分為兩個(gè)部分webview和appService。其中webview主要用來展現(xiàn)UI,appService有來處理業(yè)務(wù)邏輯、數(shù)據(jù)及接口調(diào)用。它們?cè)趦蓚€(gè)進(jìn)程中運(yùn)行,通過系統(tǒng)層JSBridge實(shí)現(xiàn)通信,實(shí)現(xiàn)UI的渲染、事件的處理
微信小程序的優(yōu)劣勢
優(yōu)勢:
1、無需下載,通過搜索和掃一掃就可以打開。
2、良好的用戶體驗(yàn):打開速度快。
3、開發(fā)成本要比App要低。
4、安卓上可以添加到桌面,與原生App差不多。
5、為用戶提供良好的安全保障。小程序的發(fā)布,微信擁有一套嚴(yán)格的審查流程, 不能通過審查的小程序是無法發(fā)布到線上的。
劣勢:
1、限制較多。頁面大小不能超過1M。不能打開超過5個(gè)層級(jí)的頁面。
2、樣式單一。小程序的部分組件已經(jīng)是成型的了,樣式不可以修改。例如:幻燈片、導(dǎo)航。
3、推廣面窄,不能分享朋友圈,只能通過分享給朋友,附近小程序推廣。其中附近小程序也受到微信的限制。
4、依托于微信,無法開發(fā)后臺(tái)管理功能。
微信小程序與H5的區(qū)別
第一條是運(yùn)行環(huán)境的不同
傳統(tǒng)的HTML5的運(yùn)行環(huán)境是瀏覽器,包括webview,而微信小程序的運(yùn)行環(huán)境并非完整的瀏覽器,是微信開發(fā)團(tuán)隊(duì)基于瀏覽器內(nèi)核完全重構(gòu)的一個(gè)內(nèi)置解析器,針對(duì)小程序?qū)iT做了優(yōu)化,配合自己定義的開發(fā)語言標(biāo)準(zhǔn),提升了小程序的性能。
第二條是開發(fā)成本的不同
只在微信中運(yùn)行,所以不用再去顧慮瀏覽器兼容性,不用擔(dān)心生產(chǎn)環(huán)境中出現(xiàn)不可預(yù)料的奇妙BUG
第三條是獲取系統(tǒng)級(jí)權(quán)限的不同
系統(tǒng)級(jí)權(quán)限都可以和微信小程序無縫銜接
第四條便是應(yīng)用在生產(chǎn)環(huán)境的運(yùn)行流暢度
長久以來,當(dāng)HTML5應(yīng)用面對(duì)復(fù)雜的業(yè)務(wù)邏輯或者豐富的頁面交互時(shí),它的體驗(yàn)總是不盡人意,需要不斷的對(duì)項(xiàng)目優(yōu)化來提升用戶體驗(yàn)。但是由于微信小程序運(yùn)行環(huán)境獨(dú)立
小程序的雙向綁定和vue的區(qū)別
小程序直接this.data的屬性是不可以同步到視圖的,必須調(diào)用:this.setData
小程序的異步請(qǐng)求問題