微信,對于大家來說,已經是很(hěn)普及的一個應用(yòng),幾乎大街(jiē)小(xiǎo)巷的人,手裏都會安(ān)裝(zhuāng)一個叫微信的app,他(tā)能(néng)記錄我們的日常,支付我們的消費......,幾乎無所不能(néng)。
而一談到微信,我們就不得不說微信上的小(xiǎo)程序,微信小(xiǎo)程序是一種不用(yòng)下載,就可(kě)以使用(yòng)的應用(yòng),自從2017年1月9日,張小(xiǎo)龍在2017微信公(gōng)開課上發布正式上線(xiàn)以來,就得到廣泛應用(yòng),小(xiǎo)程序的應用(yòng)數量超過了一百萬,覆蓋200多(duō)個細分(fēn)領域,日活躍量達到兩個億以上。
微信小(xiǎo)程序這麽強大功能(néng)的背後,到底都有(yǒu)些什麽呢(ne)?現在我們來聊聊微信小(xiǎo)程序的那些事兒。
微信小(xiǎo)程序把啓動分(fēn)為(wèi)兩種:冷啓動、熱啓動
冷啓動就是第一次啓動小(xiǎo)程序,或是小(xiǎo)程序從被内存銷毀到再次啓動
熱啓動就是用(yòng)戶打開過小(xiǎo)程序還沒有(yǒu)被銷毀,再打開小(xiǎo)程序就隻是把小(xiǎo)程序直接從後台切到前端顯示。而對于小(xiǎo)程序銷毀的時機是什麽時候呢(ne)?我們研究過:小(xiǎo)程序切到後台後,五分(fēn)鍾内就會被微信主動銷毀,而在iOS下如果五秒(miǎo)内超過1次的内存告警,就會被銷毀。
對于用(yòng)戶來說,如果手動在小(xiǎo)程序列表中(zhōng)删除小(xiǎo)程序,需要調用(yòng)App.js裏面的函數,包括的函數有(yǒu):
onLaunch() ,小(xiǎo)程序初始化應用(yòng)對象時調用(yòng)一次,即每次冷啓動的時候會調用(yòng)一次,熱啓動不會被調用(yòng)
onShow(),小(xiǎo)程序從後台進入前台時調用(yòng)
onHide() ,小(xiǎo)程序從前台進入後台時調用(yòng)
onError() ,小(xiǎo)程序發生腳本錯誤,或是調用(yòng)微信api失敗時觸發。
onPageNotFound() ,當訪問小(xiǎo)程序不存的頁(yè)面時,該頁(yè)面會被觸發,一般在裏面寫一些404跳轉頁(yè)面
每個頁(yè)面對象裏的生命周期回調函數及默認事件處理(lǐ)函數有(yǒu):
onPullDownRefresh() ,即當用(yòng)戶下拉時觸發,要在app.json的window選項中(zhōng)或頁(yè)面配置中(zhōng)開啓enablePullDownRefresh才有(yǒu)效哈
onReachBottom() ,監聽用(yòng)戶上拉觸底事件,可(kě)以在app.json的window選項中(zhōng)或頁(yè)面配置中(zhōng)設置觸發距離onReachBottomDistance
onPageScroll() ,監聽滑動頁(yè)面事件,切記切記别在此方法裏過于頻繁執行setData
onShareAppMessage() ,監聽用(yòng)戶點擊分(fēn)享時,自定義分(fēn)享的标題内容
onResize() ,小(xiǎo)程序屏幕旋轉時觸發。基礎庫 2.4.0 開始支持哈
onTabItemTap() ,點擊 tab(即底部菜單欄) 時觸發,基礎庫 1.9.0 開始支持
onLoad() ,面加載時觸發, 隻在頁(yè)面第一次加載時觸發
onShow() ,頁(yè)面從後台切入前台時觸發,頁(yè)面初始化時觸發
onReady(),頁(yè)面初次渲染完成時觸發,隻觸發一次
onHide(),頁(yè)面從前台切入後台時觸發
onUnload(),頁(yè)面卸載時觸發,即redirectTo或navigateBack到其他(tā)頁(yè)面時觸發
以上是APP.js中(zhōng)關于小(xiǎo)程序的接口函數,如果微信小(xiǎo)程序要跳轉H5,必須現在微信小(xiǎo)程序中(zhōng)嵌入一個web-view的組件。而且必須是已經打開了的WebView,不可(kě)以跳轉到外部的H5頁(yè)。目前 H5 頁(yè)不可(kě)跳小(xiǎo)程序,隻有(yǒu)在小(xiǎo)程序以 web-view 組件打開的 H5 裏才可(kě)以跳回到小(xiǎo)程序,并後H5的地址,還必須在小(xiǎo)程序的管理(lǐ)後台,手動添加到白名(míng)單。而且這個白名(míng)單地址可(kě)以是任意可(kě)訪問的地址。
App 可(kě)以跳轉到小(xiǎo)程序,小(xiǎo)程序隻能(néng)被動跳轉到 App,不可(kě)主動跳轉到 App。被動是指隻有(yǒu)當 App 主動跳入小(xiǎo)程序,小(xiǎo)程序才可(kě)以跳回到 App。
微信小(xiǎo)程序的渲染方式為(wèi) WebView,而非原生渲染,隻有(yǒu) <canvas/>、<video/>、<map/>、<textarea/>、<input>、<live-pusher>、<live-player> 幾個組件才是原生渲染。
微信小(xiǎo)程序目前統一使用(yòng) rpx 單位來隔離機器之間屏幕大小(xiǎo)的差異,以達到适配,讓開發者更加專注業務(wù)。
目前一個小(xiǎo)程序不可(kě)超過 2M,如果小(xiǎo)程序做了分(fēn)包,則所有(yǒu)包加起來不可(kě)超過 8M,每個包不可(kě)超過 2M。
微信開發者工(gōng)具(jù)下 JS 是跑在 Node-Webkit 内核,iOS 下是跑在 JSCore 内核,安(ān)卓下是跑在 X5 内核。
iOS 下大圖和長(cháng)列表圖都會導緻 WKWebView 被回收。
同一個微信用(yòng)戶,同一個小(xiǎo)程序 storage 上限為(wèi) 10MB,如果存儲空間不足,會自動清除掉最久沒使用(yòng)的數據;本地緩存文(wén)件和用(yòng)戶文(wén)件普通小(xiǎo)程序上限 10M,遊戲小(xiǎo)程序上限 50M。
wx.request、wx.uploadFile、wx.downloadFile 默認超時時間和最大超時時間都是 60s,最大并發限制是 10 個,網絡請求的 Referer header 不可(kě)設置。其格式固定為(wèi) https://servicewechat.com/{appid}/{version}/page-frame.html,其中(zhōng) {appid} 為(wèi)微信小(xiǎo)程序的 AppID,{version} 為(wèi)小(xiǎo)程序的版本号。版本号為(wèi) 0 表示為(wèi)開發版、體(tǐ)驗版及審核版本,版本号為(wèi) devtools 表示為(wèi)開發者工(gōng)具(jù),其餘為(wèi)正式版本。
在寫頁(yè)面的時候,如果頁(yè)面上有(yǒu)倒計時功能(néng),在微信小(xiǎo)程序 onHide 後沒有(yǒu)停掉倒計時,在 iPhone 下就會觸發内存不夠,微信小(xiǎo)程序被回收;而再把微信小(xiǎo)程序切回到前台界面上,微信小(xiǎo)程序又(yòu)沒有(yǒu)重新(xīn)渲染,從而導緻白屏。建議在 onHide 裏及時結束倒計時,onShow 裏再重新(xīn)啓動。
成都微信小(xiǎo)程序開發團隊認為(wèi),在當今,微信小(xiǎo)程序開發的技(jì )能(néng),是需要我們開發人員掌握的基本技(jì )能(néng),掌握了該基本技(jì )能(néng),才能(néng)适應市場的需求。而微信小(xiǎo)程序的開發,對于開發人員來說,這項技(jì )能(néng)掌握起來也是十分(fēn)快速的。