公司的小程序項目上線, 後期還會有小型的版本迭代. 爲了讓用戶能在咱們進行版本迭代後及時使用最新版本的功能. 作了如下優化..javascript
知識點1: 當用戶點擊左上角關閉,或者按了設備Home 鍵離開微信,小程序並無直接銷燬,而是進入了後臺;
當再次進入微信或再次打開小程序,又會從後臺進入前臺,只有當小程序進入後臺必定時間,或者系統資源佔用太高,纔會被真正的銷燬。html
知識點2: 小程序的啓動分爲"冷啓動" 和 "熱啓動".
熱啓動是指: 小程序打開後,在一段時間內(目前:5分鐘)再次被打開,此時會將後臺的小程序切換到前臺。
冷啓動是指: 小程序首次打開或銷燬後再次被打開java
知識點3: 更新版本
冷啓動時, 若是發現有新版本,將會異步下載新版本的代碼包,並同時用客戶端本地的包進行啓動,即新版本的小程序須要等下一次冷啓動纔會應用上。
若是要立刻應用最新版本,使用 wx.getUpdateManager API 進行處理。小程序
代碼以下:api
// 在app.js裏寫下如下代碼 onLaunch () { if (wx.canIUse('getUpdateManager')) { const updateManager = wx.getUpdateManager() updateManager.onCheckForUpdate(function (res) { console.log('onCheckForUpdate====', res) // 請求完新版本信息的回調 if (res.hasUpdate) { console.log('res.hasUpdate====') updateManager.onUpdateReady(function () { wx.showModal({ title: '更新提示', content: '新版本已經準備好,是否重啓應用?', success: function (res) { console.log('success====', res) // res: {errMsg: "showModal: ok", cancel: false, confirm: true} if (res.confirm) { // 新的版本已經下載好,調用 applyUpdate 應用新版本並重啓 updateManager.applyUpdate() } } }) }) updateManager.onUpdateFailed(function () { // 新的版本下載失敗 wx.showModal({ title: '已經有新版本了喲~', content: '新版本已經上線啦~,請您刪除當前小程序,從新搜索打開喲~' }) }) } }) } }
知識點4: 小程序從新初始化時會觸發onLaunch事件. onLaunch事件會觸發在頁面onShow事件以前.獲取小程序更新版本能夠寫在onLaunch裏.微信
知識點5:
在開發和體驗版沒法測試版本更新
須要在開發者工具裏,編譯時選擇"模擬更新編譯"
網絡
點擊肯定,從新編譯.
頁面會彈窗顯示:
app
點擊確認後: 異步
控制檯顯示:工具
知識點6: 隨着小程序的不斷更新, 部分功能可能須要最新版的微信客戶端才能使用. 這時候能夠彈窗提示用戶更新到最新版本微信
if (wx.canIUse('getUpdateManager')) { ... } else { // can't use getUpdateManager wx.showModal({ title: '提示', content: '當前微信版本太低,沒法使用該功能,請升級到最新微信版本後重試。' })
完整版本:
onLaunch () {
if (wx.canIUse('getUpdateManager')) { const updateManager = wx.getUpdateManager() updateManager.onCheckForUpdate(function (res) { if (res.hasUpdate) { updateManager.onUpdateReady(function () { wx.showModal({ title: '更新提示', content: '新版本已經準備好,是否重啓應用?', success: function (res) { if (res.confirm) { updateManager.applyUpdate() } } }) }) updateManager.onUpdateFailed(function () { wx.showModal({ title: '已經有新版本了喲~', content: '新版本已經上線啦~,請您刪除當前小程序,從新搜索打開喲~' }) }) } }) } else { wx.showModal({ title: '提示', content: '當前微信版本太低,沒法使用該功能,請升級到最新微信版本後重試。' }) } }
知識點7: 若是在onLaunch裏進行請求, 這是異步請求. 若是對交互順序有要求, 如: 版本更新--從新獲取數據-- 用戶展現, 那麼須要考慮在callback裏進行重獲數據.
知識點8:
小程序啓動時,正常是會熱更新,下載新版本的包,下一次啓動就會使用新包。但發現有更新不成功的狀況發生.
官方回答: 策略生效跟網絡環境以及發佈時間等若干因素有關,會盡量讓小程序快地更新,但沒法保證每次都熱更新成功。
知識點9:
小程序的異步更新發生在冷啓動過程. 官方不建議熱更新. 緣由: