小程序和钉钉发版后老版缓存的问题调研

小程序发版后老版缓存方式

1、 小程序运行机制

(1)小程序启动

小程序启动会有两种情况,一种是冷启动,一种是热启动。

        热启动:假如用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时无需重新启动,只需将后台态的小程序切换到前台,这个过程就是热启动;

        冷启动:用户首次打开或小程序被微信主动销毁后再次打开的情况,此时小程序需要重新加载启动,即冷启动。

(2)小程序销毁

        需要注意的是:只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。

A、当小程序进入后台,客户端会维持一段时间的运行状态,超过一定时间后(目前是5分钟)小程序会被微信主动销毁

B、当小程序占用系统资源过高,可能会被系统销毁或被微信客户端主动回收。

2、UpdateManager

       UpdateManager 对象,用来管理更新,可通过 wx.getUpdateManager 接口获取实例。(从基础库1.9.90才开始支持,也就是微信版本为6.6.1及以上)

A、UpdateManager.applyUpdate()

强制小程序重启并使用新版本。在小程序新版本下载完成后(即收到 onUpdateReady 回调)调用。

B、UpdateManager.onCheckForUpdate(function callback)

        监听向微信后台请求检查更新结果事件。微信在小程序冷启动时自动检查更新,不需由开发者主动触发。

C、UpdateManager.onUpdateReady(function callback)

监听小程序有版本更新事件。客户端主动触发下载(无需开发者触发),下载成功后回调

D、UpdateManager.onUpdateFailed(function callback)

监听小程序更新失败事件。小程序有新版本,客户端主动触发下载(无需开发者触发),下载失败(可能是网络原因等)后回调

代码示例

App({
    onLaunch: function(){
        const updateManager = wx.getUpdateManager()
    
        updateManager.onCheckForUpdate(function (res) {
            // 请求完新版本信息的回调
            console.log(res.hasUpdate)
        })
 
        updateManager.onUpdateReady(function () {
            wx.showModal({
                title: '更新提示',
                content: '新版本已经准备好,是否重启应用?',
                success: function (res) {
                    if (res.confirm) {
                        // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
                        updateManager.applyUpdate()
                    }
                }
              })
        })
 
        updateManager.onUpdateFailed(function () {
          // 新版本下载失败
        })
    }
})

钉钉E应用

经过查询资料后获取到的信息:

1、钉钉小程序E应用在发版时会有一个老版本的缓存,每次发版后直接打开E应用,其实访问的是上一个版本的缓存,这个缓存会在发版后10分钟左右自动更新成最新版本,如果想要直接看到最新版本,可以退出钉钉登录账户,并杀掉钉钉进程,这样再进去后就是直接访问的最新版本了.

文档提示自己本地实验:微信开发者工具上可以通过「编译模式」下的「下次编译模拟更新」开关来调试

我自己在本地根据上述的提示实验过,当下次编译时,当本地不是最新版本,会提示“新版本已经准备好,是否重启应用?”,点击确定就触发UpdateManager.applyUpdate()事件,强制小程序重启。

原文地址:https://www.cnblogs.com/mxyr/p/10855368.html