小程序是一種不需要下載安裝即可使用的應(yīng)用。它實現(xiàn)了應(yīng)用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應(yīng)用;也體現(xiàn)了“用完即走”的理念,用戶不用關(guān)心是否 ...
小程序是一種不需要下載安裝即可使用的應(yīng)用。它實現(xiàn)了應(yīng)用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應(yīng)用;也體現(xiàn)了“用完即走”的理念,用戶不用關(guān)心是否安裝太多應(yīng)用的問題。
早在2016年9月,攜程就獲得小程序內(nèi)測名額,在對微信文檔規(guī)則調(diào)研、確定需要開發(fā)的業(yè)務(wù)之后,就開始了風(fēng)風(fēng)火火的開發(fā)。
回顧三個多月的開發(fā)過程,其中碰到了各種問題,也嘗試了一些解決辦法,最終打造了攜程獨(dú)立的小程序框架。
本文將主要介紹攜程小程序的框架,開發(fā)和發(fā)布審核中碰到的問題及我們的一些解決辦法。
一、攜程微信小程序的框架介紹
1、CPage()
CPage是封裝了微信的Page的函數(shù),內(nèi)部通過插入中間件裝飾頁面初始化的option,主要實現(xiàn)頁面間通信、頁面層級控制、埋點、頁面分享等功能。
中間件
Base : 裝飾option
Navigator:內(nèi)部維護(hù)navigatorOpts存儲上文的參數(shù)回調(diào)等,pageStack存儲頁面棧信息
UBT :為業(yè)務(wù)提供埋點分析、統(tǒng)計頁面駐留等信息分享
分享
在CPage中特殊處理,同時也方便統(tǒng)計分析
CPage中data處理的具體流程如下圖:

流程解釋:
data傳入CPage
Baes同步data生命周期,接受data自有屬性
Navigator控制層級,使用navigateTo上下文交互
UBT提供統(tǒng)計分析功能,及后續(xù)更多中間件處理
newData接受data.onShareAppMessage和中間件的屬性
傳入原生Page()
2、CWX
cwx的原型是wx,擴(kuò)展了更多API,工具類、網(wǎng)絡(luò)請求相關(guān)、定位相關(guān)、組件API等。
網(wǎng)絡(luò)請求
wx.request()最大并發(fā)數(shù)是5,所以要避免同時并發(fā)很多請求。
主要在兩個方面:
1、cwx提供了request,內(nèi)部通過隊列的方式控制request,并且提供了cancel方法取消在等待隊列中的request
2、服務(wù)端數(shù)據(jù)合并,小程序端單個頁面請求減少
工具類
提供常用的方法,如Base64加解密,JS對象類型的判斷等
定位
1、使用wx.getLocation獲取到經(jīng)緯度,上傳服務(wù)端匹配定位城市相關(guān)信息,使用百度逆地址解析
2、內(nèi)部實現(xiàn)隊列控制定位請求,解決授權(quán)等問題
組件API
對接組件,提供快捷使用組件的API,可在任意頁面使用基礎(chǔ)組件
cwx.component.calendar()
cwx.component.city()
cwx.component.imagebrowser()
3、基礎(chǔ)組件
基礎(chǔ)組件都是基于CPage實現(xiàn)的,參數(shù)傳遞頁面回調(diào)都遵循CPage的規(guī)則
日歷組件
提供常用的日期選擇功能,日期元素支持一級標(biāo)題、二級標(biāo)題及顏色等自定義
城市選擇組件
支持國內(nèi)和國際城市選擇,支持索引篩選,提供搜索功能
圖片瀏覽組件