----微信小程序热更新----

公司的小程序项目上线, 后期还会有小型的版本迭代. 为了让用户能在咱们进行版本迭代后及时使用最新版本的功能. 作了如下优化..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:
在开发和体验版没法测试版本更新
须要在开发者工具里,编译时选择"模拟更新编译"
网络

 
image.png

(部分开发者工具版本, 每次update编译时都须要从新勾选此选项)

 

点击肯定,从新编译.
页面会弹窗显示:
app

 
image.png

 

点击确认后: 异步


 
image.png

控制台显示:工具


 
image.png

知识点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:
小程序的异步更新发生在冷启动过程. 官方不建议热更新. 缘由:

 
image.png
做者:小小小魔仙 连接:https://www.jianshu.com/p/4f5e3faaf483 来源:简书 简书著做权归做者全部,任何形式的转载都请联系做者得到受权并注明出处。
相关文章
相关标签/搜索