网站内容更新的通知(3.定时check新版本(目前方案:6.6.3及以上版本))

优采云 发布时间: 2021-11-09 02:13

  网站内容更新的通知(3.定时check新版本(目前方案:6.6.3及以上版本))

  背景

  此前,有开发者反映,小程序新版本发布后,新版本的覆盖速度较慢,因为小程序的更新机制是异步的,部分用户不会立即应用新版本。

  小程序启动时有两种情况,一种是“冷启动”,一种是“热启动”。如果用户已经打开了小程序,然后在一定时间内再次打开小程序,此时无需重启,只需将后台状态的小程序切换到前台即可,这个过程是一个热启动;冷启动是指用户第一次打开小程序或者被微信主动销毁后再次打开,需要重新加载小程序并启动。

  小程序的异步更新发生在冷启动过程中。当发现新版本时,会异步下载新版本的代码包,但不会立即应用最新版本。直到小程序下次冷启动时才会应用新版本。

  解决方案

  为了解决这个问题,我们内部也经历了几次讨论。下面是一个简单的介绍:

  1. 同步检查更新(放弃):可能是最直接的解决方法,但主要问题是会影响小程序的启动速度。小程序的更新迭代非常频繁,有的用户可能每次都会启动。点击更新,如果需要同时检查更新+下载新版本,会影响这些用户的启动体验。

  2. 热模块更换(放弃):从技术上讲,这是最好的解决方案。小程序运行后,当打开新页面时,会立即应用新版本中的页面,但会出现新旧逻辑和页面共存的问题,开发人员比较难处理,尤其是谈到全局变量,情况会更加复杂。对于我们现有的框架来说,这也是一个很大的挑战,但这就是我们将遵循的。努力的方向。

  3. 定期检查新版本(当前计划):6.6.3 及以上客户端会定期检查最近使用的小程序是否有新版本;如果是这样,新版本将在您下次打开时同步更新。这样可以保证所有小程序在新版本发布24小时后都可以使用最新版本。(这部分是微信客户端本身的优化,开发者无需关心)

  4. 异步更新+强制更新(当前方案):同步校验更新和模块热替换的折衷,即维护异步更新机制,提供小程序代码包异步下载后重启小程序的能力立即解决紧急问题。

  异步更新+强制更新方案介绍

  从基础库1.9.90开始,我们提供了wx.getUpdateManager接口。通过该界面,可以知道小程序是否有新版本,是否下载了新版本,以及是否可以应用新版本。

  小程序冷启动时,会自动向微信后台请求新版本信息。如果有新版本,会立即触发新版本的下载。开发者可以通过 wx.getUpdateManager 获取当前的更新状态。

  wx.getUpdateManager 接口将返回一个 UpdateManager 实例。UpdateManager 收录三个回调:

  1. onCheckForUpdate:当小程序从后台请求完新版本信息后,会通知这个版本通知检查结果

  2. onUpdateReady:当新版本下载完成时,会回调该事件

  3. onUpdateFailed:当新版本下载失败时,会回调该事件

  还有一个用于重新启动新版本应用程序的界面:

  1. applyUpdate:当下载新版本(onUpdateReady)时,调用该方法会强制当前小程序应用新版本并重启

  具体例子:

  // wx.getUpdateManager 仅在1.9.90 可用,请注意兼容性

  const updateManager = wx.getUpdateManager()

  updateManager.onCheckForUpdate(function (res) {

  // 请求新版本信息后回调

  控制台日志(res.hasUpdate)

  })

  updateManager.onUpdateReady(function () {

  wx.showModal({

  title:'更新提示',

  内容:'新版本已准备就绪,要立即重启小程序吗?',

  成功:功能(资源){

  如果(重新确认){

  // 新版本已经下载完毕,调用applyUpdate应用新版本并重启

  updateManager.applyUpdate()

  }

  }

  })

  })

  updateManager.onUpdateFailed(function () {

  // 下载新版本失败

  })

  更详细的信息请参考UpdateManager的详细文档

  最佳实践

  在用户体验方面,我们还是建议在非常必要的时候强制用户重启更新,比如在线紧急BUG。一般情况下,可以通过弹出的选择框选择让用户选择是否重启更新(具体实现请参考示例代码)。

  如何调试

  最新版本的微信开发者工具提供了调试强制更新的能力。可以通过编译模式-编辑编译模式勾选“下次编译时模拟更新”来调试开发者工具上的强制更新功能。

  点击我获取最新开发者工具的下载链接。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线