小程序版本更新策略
参考:
- 【小程序更新机制官方文档】https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/update-mechanism.html
当发布一个新版本后,用户并不能“立即”获得更新
小程序的资源是托管在微信服务器上的,跟网站不同,微信不会在用户每次打开小程序时,从服务器拉取最新的小程序资源,而是尽可能地发挥缓存的优势
- 当用户打开小程序时,微信客户端会先从缓存中拉取小程序的端侧资源,有的话就展示给用户,没有的话会从微信服务器拉取,这时,拉取的肯定是最新版本,然后放入缓存并展示给用户
既然优先使用缓存中的资源,那么当我发布了小程序新版本之后,怎么保证用户尽可能快地更新为新版本呢?
- 未启动时: 指的是小程序处于非活跃状态时(比如处于后台),但是请注意,这种状态是用户已经用过小程序后才会产生的,如果用户从来都没有用过你的小程序,就不存在状态的概念了,因为对于这个用户来说,你的小程序是无状态的。
- 冷启动时: 小程序被销毁重新打开后会进入冷启动状态
当你在小程序管理后台发布新版本的小程序之后,微信会根据用户设备上小程序的状态实施不同的更新策略
启动时同步更新
在以下情况下,小程序启动时会同步更新代码包。同步更新会阻塞小程序的启动流程,影响小程序的启动耗时。
如果更新失败或超时,为了保障小程序的可用性,还是会使用本地版本打开。
定期检查发现版本更新
微信运行时,会定期检查最近使用的小程序是否有更新。如果有更新,下次小程序启动时会同步进行更新,更新到最新版本后再打开小程序,尽可能保证用户能够尽快使用小程序的最新版本。
总的来说,开发者在后台发布新版本之后,无法立刻影响到所有现网用户,但最差情况下,也在发布之后 24 小时之内覆盖绝大多数用户。
用户长时间未使用小程序
用户长时间未使用小程序时,为保障小程序版本的实时性,会强制同步检查版本更新,更新到最新版本后再打开小程序
启动时异步更新
即使启动前未发现更新,小程序每次冷启动时,都会异步检查是否有更新版本。如果发现有新版本,将会异步下载新版本的代码包。但当次启动仍会使用客户端本地的旧版本代码
新版本的小程序需要等下一次冷启动才会使用。
开发者手动触发更新 【更新机制】
通过小程序的更新机制的API, 来提示用户更新小程序
在启动时异步更新的情况下,如果开发者希望立刻进行版本更新,可以使用 wx.getUpdateManager API 进行处理。在有新版本时提示用户重启小程序更新新版本。
const updateManager = wx.getUpdateManager()
// 检测到更新
updateManager.onCheckForUpdate(function (res) {
// 请求完新版本信息的回调
console.log(res.hasUpdate)
if(res.hasUpdate){
wx.showModal({
title: '更新下载中....请不要离开'
})
}
})
// 更新已经完成
updateManager.onUpdateReady(function () {
wx.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success(res) {
if (res.confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
}
}
})
})
// 新版本下载失败
updateManager.onUpdateFailed(function () {
})
冷启动和热启动
冷启动
- 需要重新加载资源、请求数据,启动速度较慢 【类似与重新加载整个小程序】
热启动
- 热启动则是在已经加载过的状态下启动,速度更快,无需重新加载资源和请求数据。
- 保留在小程序里的操作和各种缓存,重新打开小程序还会保持原样