小程序的運(yùn)行機(jī)制
小程序把啟動分為兩種:冷啟動、熱啟動
- 冷啟動就是第一次啟動小程序,或是小程序從被內(nèi)存銷毀到再次啟動
- 熱啟動就是用戶打開過小程序還沒有被銷毀,再打開小程序就只是把小程序從后臺切到前端顯示
小程序銷毀的時機(jī):
- 小程序切到后臺后,五分鐘內(nèi)就會被微信主動銷毀
- 在iOS下如果五秒內(nèi)超過1次的內(nèi)存告警蕾盯,就會被銷毀
- 用戶手動從小程序列表刪除小程序
app.js 應(yīng)用對象里的生命周期回調(diào)函數(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選項(xiàng)中或頁面配置中開啟enablePullDownRefresh才有效哈
onReachBottom() //監(jiān)聽用戶上拉觸底事件,可以在app.json的window選項(xiàng)中或頁面配置中設(shè)置觸發(fā)距離onReachBottomDistance
onPageScroll() //監(jiān)聽滑動頁面事件掠兄,切記切記別在此方法里過于頻繁執(zhí)行setData
onShareAppMessage() //監(jiān)聽用戶點(diǎn)擊分享時像云,自定義分享的標(biāo)題內(nèi)容
onResize() //小程序屏幕旋轉(zhuǎn)時觸發(fā)锌雀÷煜Γ基礎(chǔ)庫 2.4.0 開始支持哈
onTabItemTap() //點(diǎn)擊 tab(即底部菜單欄) 時觸發(fā),基礎(chǔ)庫 1.9.0 開始支持
onLoad() //面加載時觸發(fā), 只在頁面第一次加載時觸發(fā)
onShow() //頁面從后臺切入前臺時觸發(fā)腋逆,頁面初始化時觸發(fā)
onReady() //頁面初次渲染完成時觸發(fā)婿牍,只觸發(fā)一次
onHide() //頁面從前臺切入后臺時觸發(fā)
onUnload() //頁面卸載時觸發(fā),即redirectTo或navigateBack到其他頁面時觸發(fā)
小程序跳轉(zhuǎn) H5 頁必須是已打開 WebView(小程序有一個打開 web-view 組件)的方式打開惩歉,不可跳轉(zhuǎn)到外部 H5 頁等脂。目前 H5 頁不可跳小程序,只有在小程序以 web-view 組件打開的 H5 里才可以跳回到小程序撑蚌。切記跳的 H5 地址還得在小程序管理后臺設(shè)置白名單方上遥,且這個地址一定是你們可控的。
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ā)版、體驗(yàn)版及審核版本食呻,版本號為 devtools 表示為開發(fā)者工具流炕,其余為正式版本。
在寫頁面的時候搁进,如果頁面上有倒計時功能浪感,在小程序 onHide 后沒有停掉倒計時,在 iPhone 下就會觸發(fā)內(nèi)存不夠饼问,小程序被回收影兽;而再把小程序切回到前臺界面上,小程序又沒有重新渲染莱革,從而導(dǎo)致白屏峻堰。建議在 onHide 里及時結(jié)束倒計時,onShow 里再重新啟動盅视。