分享最實用的技術(shù),創(chuàng)造更大的價值

關(guān)于微信小程序的那些事

    微信,對于大家來說,已經(jīng)是很普及的一個應(yīng)用,幾乎大街小巷的人,手里都會安裝一個叫微信的app,他能記錄我們的日常,支付我們的消費......,幾乎無所不能。

    而一談到微信,我們就不得不說微信上的小程序,微信小程序是一種不用下載,就可以使用的應(yīng)用,自從2017年1月9日,張小龍在2017微信公開課上發(fā)布正式上線以來,就得到廣泛應(yīng)用,小程序的應(yīng)用數(shù)量超過了一百萬,覆蓋200多個細(xì)分領(lǐng)域,日活躍量達(dá)到兩個億以上。

     微信小程序這么強(qiáng)大功能的背后,到底都有些什么呢?現(xiàn)在我們來聊聊微信小程序的那些事兒。


小程序開發(fā)


微信小程序的運(yùn)行機(jī)制是什么

    微信小程序把啟動分為兩種:冷啟動、熱啟動

    冷啟動就是第一次啟動小程序,或是小程序從被內(nèi)存銷毀到再次啟動

    熱啟動就是用戶打開過小程序還沒有被銷毀,再打開小程序就只是把小程序直接從后臺切到前端顯示。而對于小程序銷毀的時機(jī)是什么時候呢?我們研究過:小程序切到后臺后,五分鐘內(nèi)就會被微信主動銷毀,而在iOS下如果五秒內(nèi)超過1次的內(nèi)存告警,就會被銷毀。

對于用戶來說,如果手動在小程序列表中刪除小程序,需要調(diào)用App.js里面的函數(shù),包括的函數(shù)有: 


onLaunch() ,小程序初始化應(yīng)用對象時調(diào)用一次,即每次冷啟動的時候會調(diào)用一次,熱啟動不會被調(diào)用

onShow(),小程序從后臺進(jìn)入前臺時調(diào)用

onHide() ,小程序從前臺進(jìn)入后臺時調(diào)用 

onError() ,小程序發(fā)生腳本錯誤,或是調(diào)用微信api失敗時觸發(fā)。

onPageNotFound() ,當(dāng)訪問小程序不存的頁面時,該頁面會被觸發(fā),一般在里面寫一些404跳轉(zhuǎn)頁面

每個頁面對象里的生命周期回調(diào)函數(shù)及默認(rèn)事件處理函數(shù)有:

onPullDownRefresh() ,即當(dāng)用戶下拉時觸發(fā),要在app.json的window選項中或頁面配置中開啟enablePullDownRefresh才有效哈

onReachBottom() ,監(jiān)聽用戶上拉觸底事件,可以在app.json的window選項中或頁面配置中設(shè)置觸發(fā)距離onReachBottomDistance

onPageScroll() ,監(jiān)聽滑動頁面事件,切記切記別在此方法里過于頻繁執(zhí)行setData

onShareAppMessage() ,監(jiān)聽用戶點擊分享時,自定義分享的標(biāo)題內(nèi)容

onResize() ,小程序屏幕旋轉(zhuǎn)時觸發(fā)?;A(chǔ)庫 2.4.0 開始支持哈

onTabItemTap() ,點擊 tab(即底部菜單欄) 時觸發(fā),基礎(chǔ)庫 1.9.0 開始支持

onLoad() ,面加載時觸發(fā), 只在頁面第一次加載時觸發(fā)

onShow() ,頁面從后臺切入前臺時觸發(fā),頁面初始化時觸發(fā)

onReady(),頁面初次渲染完成時觸發(fā),只觸發(fā)一次

onHide(),頁面從前臺切入后臺時觸發(fā)

onUnload(),頁面卸載時觸發(fā),即redirectTo或navigateBack到其他頁面時觸發(fā)

以上是APP.js中關(guān)于小程序的接口函數(shù),如果微信小程序要跳轉(zhuǎn)H5,必須現(xiàn)在微信小程序中嵌入一個web-view的組件。而且必須是已經(jīng)打開了的WebView,不可以跳轉(zhuǎn)到外部的H5頁。目前 H5 頁不可跳小程序,只有在小程序以 web-view 組件打開的 H5 里才可以跳回到小程序,并后H5的地址,還必須在小程序的管理后臺,手動添加到白名單。而且這個白名單地址可以是任意可訪問的地址。 


App 可以跳轉(zhuǎn)到小程序,小程序只能被動跳轉(zhuǎn)到 App,不可主動跳轉(zhuǎn)到 App。被動是指只有當(dāng) App 主動跳入小程序,小程序才可以跳回到 App。


微信小程序的渲染方式為 WebView,而非原生渲染,只有 <canvas/>、<video/>、<map/>、<textarea/>、<input>、<live-pusher>、<live-player> 幾個組件才是原生渲染。


微信小程序目前統(tǒng)一使用 rpx 單位來隔離機(jī)器之間屏幕大小的差異,以達(dá)到適配,讓開發(fā)者更加專注業(yè)務(wù)。


目前一個小程序不可超過 2M,如果小程序做了分包,則所有包加起來不可超過 8M,每個包不可超過 2M。


微信開發(fā)者工具下 JS 是跑在 Node-Webkit 內(nèi)核,iOS 下是跑在 JSCore 內(nèi)核,安卓下是跑在 X5 內(nèi)核。


iOS 下大圖和長列表圖都會導(dǎo)致 WKWebView 被回收。


同一個微信用戶,同一個小程序 storage 上限為 10MB,如果存儲空間不足,會自動清除掉最久沒使用的數(shù)據(jù);本地緩存文件和用戶文件普通小程序上限 10M,游戲小程序上限 50M。


wx.request、wx.uploadFile、wx.downloadFile 默認(rèn)超時時間和最大超時時間都是 60s,最大并發(fā)限制是 10 個,網(wǎng)絡(luò)請求的 Referer header 不可設(shè)置。其格式固定為 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 為微信小程序的 AppID,{version} 為小程序的版本號。版本號為 0 表示為開發(fā)版、體驗版及審核版本,版本號為 devtools 表示為開發(fā)者工具,其余為正式版本。


在寫頁面的時候,如果頁面上有倒計時功能,在微信小程序 onHide 后沒有停掉倒計時,在 iPhone 下就會觸發(fā)內(nèi)存不夠,微信小程序被回收;而再把微信小程序切回到前臺界面上,微信小程序又沒有重新渲染,從而導(dǎo)致白屏。建議在 onHide 里及時結(jié)束倒計時,onShow 里再重新啟動。

小程序運(yùn)行的流程

    成都微信小程序開發(fā)團(tuán)隊認(rèn)為,在當(dāng)今,微信小程序開發(fā)的技能,是需要我們開發(fā)人員掌握的基本技能,掌握了該基本技能,才能適應(yīng)市場的需求。而微信小程序的開發(fā),對于開發(fā)人員來說,這項技能掌握起來也是十分快速的。


聯(lián)系
QQ
電話
咨詢電話:189-8199-7898
TOP