在微信小程序的開發(fā)和迭代過(guò)程中,新版本覆蓋率的問(wèn)題一直備受關(guān)注。由于小程序采用異步更新機(jī)制,在用戶首次打開或冷啟動(dòng)時(shí)才會(huì)檢查并下載新版本,導(dǎo)致部分用戶無(wú)法及時(shí)應(yīng)用上最新版本。為了解決這一問(wèn)題,微信團(tuán)隊(duì)經(jīng)過(guò)深入研究和討論,提出了幾種解決方案,并最終確定了結(jié)合異步更新與強(qiáng)制更新的折衷方案。
小程序啟動(dòng)類型及更新機(jī)制
小程序啟動(dòng)分為「冷啟動(dòng)」和「熱啟動(dòng)」兩種情況。冷啟動(dòng)是用戶首次打開或小程序被后臺(tái)銷毀后重新打開的情況,此時(shí)需要重新加載整個(gè)小程序;而熱啟動(dòng)則是將后臺(tái)態(tài)的小程序切換至前臺(tái),無(wú)需重新加載。異步更新發(fā)生在冷啟動(dòng)階段,發(fā)現(xiàn)新版本后會(huì)異步下載,但不會(huì)立即應(yīng)用,需等待下一次冷啟動(dòng)才能使用新版本。
解決策略考量
針對(duì)新版本覆蓋率慢的問(wèn)題,我們首先考慮了同步檢查更新的方法,但這會(huì)導(dǎo)致頻繁更新的小程序啟動(dòng)速度變慢,影響用戶體驗(yàn)。模塊熱替換技術(shù)雖然理論上最優(yōu),但由于可能引發(fā)的新舊邏輯共存、全局變量沖突等問(wèn)題,目前暫未采納,但我們會(huì)將其作為未來(lái)持續(xù)努力的方向。
微信客戶端自身也進(jìn)行了優(yōu)化,6.6.3 及以上版本會(huì)在定時(shí) check 過(guò)程中確保最近使用過(guò)的小程序能在發(fā)布新版本 24 小時(shí)內(nèi)應(yīng)用到最新版本。
異步更新 + 強(qiáng)制更新方案詳解
從基礎(chǔ)庫(kù)版本 1.9.90 開始,微信提供了 wx.getUpdateManager
接口,使得開發(fā)者能夠更好地控制小程序的更新流程。通過(guò)該接口獲取的 UpdateManager
實(shí)例具備多種回調(diào)方法,用于處理不同階段的更新狀態(tài)。
-
onCheckForUpdate: 當(dāng)小程序向后臺(tái)請(qǐng)求完新版本信息后,此回調(diào)會(huì)被觸發(fā),告知是否有新版本可用。
-
onUpdateReady: 新版本下載完成后,會(huì)調(diào)用此回調(diào)事件,意味著新版本已經(jīng)準(zhǔn)備就緒,可以進(jìn)行安裝。
-
onUpdateFailed: 如果新版本下載失敗,則會(huì)通過(guò)此回調(diào)通知開發(fā)者。
此外,UpdateManager
還提供了一個(gè)關(guān)鍵接口:
-
applyUpdate: 在收到
onUpdateReady
回調(diào)后,調(diào)用此方法即可強(qiáng)制當(dāng)前小程序應(yīng)用新版本并重啟,確保用戶盡快獲得更新內(nèi)容。
總結(jié)來(lái)說(shuō),異步更新與強(qiáng)制更新相結(jié)合的方案有效兼顧了用戶啟動(dòng)速度與新版本快速覆蓋的需求。借助 wx.getUpdateManager
接口,開發(fā)者可以根據(jù)業(yè)務(wù)場(chǎng)景靈活控制更新策略,從而提升用戶的使用體驗(yàn)和滿意度。隨著微信小程序生態(tài)的不斷發(fā)展和完善,我們期待更多優(yōu)化更新體驗(yàn)的技術(shù)手段出現(xiàn),讓每一次迭代都更加流暢高效。
用戶手動(dòng)更新機(jī)制的實(shí)現(xiàn)
在微信小程序開發(fā)過(guò)程中,新版本的快速覆蓋和用戶體驗(yàn)是開發(fā)者關(guān)注的重點(diǎn)。為了解決新版本更新滯后的問(wèn)題,微信提供了wx.getUpdateManager
接口,允許開發(fā)者通過(guò)異步方式檢查并下載新版本的小程序代碼包。本文將詳細(xì)解析如何利用單例模式創(chuàng)建一個(gè)更新管理模塊,并在實(shí)際項(xiàng)目中實(shí)現(xiàn)用戶手動(dòng)更新功能。
首先,在項(xiàng)目中新建一個(gè)名為
updateAppSingleton.js
的文件,用于封裝更新邏輯:
export default (function() {
let instance,updateManager;
function init(wx) {
return {
checkForUpdate() {
var self = this
// 獲取小程序更新機(jī)制兼容
if(!updateManager){
if (wx.canIUse('getUpdateManager')) {
updateManager = wx.getUpdateManager()
//1. 檢查小程序是否有新版本發(fā)布
updateManager.onCheckForUpdate(function(res) {
// 請(qǐng)求完新版本信息的回調(diào)
if (res.hasUpdate) {
//檢測(cè)到新版本,需要更新,給出提示
console.log(res.hasUpdate,'hasUpdate')
wx.showModal({
title: '更新提示',
content: '檢測(cè)到新版本,是否下載新版本并重啟小程序?',
success: function(res) {
if (res.confirm) {
//2. 用戶確定下載更新小程序,小程序下載及更新靜默進(jìn)行
self.downLoadAndUpdate(updateManager)
} else if (res.cancel) {
//用戶點(diǎn)擊取消按鈕的處理,如果需要強(qiáng)制更新,則給出二次彈窗,如果不需要,則這里的代碼都可以刪掉了
wx.showModal({
title: '溫馨提示~',
content: '本次版本更新涉及到新的功能添加,舊版本無(wú)法正常訪問(wèn)的哦~',
showCancel: false, //隱藏取消按鈕
confirmText: "確定更新", //只保留確定更新按鈕
success: function(res) {
if (res.confirm) {
//下載新版本,并重新應(yīng)用
self.downLoadAndUpdate(
updateManager)
}
}
})
}
}
})
}
})
} else {
// 如果希望用戶在最新版本的客戶端上體驗(yàn)?zāi)男〕绦?,可以這樣子提示
wx.showModal({
title: '提示',
content: '當(dāng)前微信版本過(guò)低,無(wú)法使用該功能,請(qǐng)升級(jí)到最新微信版本后重試。'
})
}
}
},
// 下載小程序新版本并重啟應(yīng)用的方法保持不變
downLoadAndUpdate(updateManager) {
var self = this
wx.showLoading();
//靜默下載更新小程序新版本
updateManager.onUpdateReady(function() {
wx.hideLoading()
//新的版本已經(jīng)下載好,調(diào)用 applyUpdate 應(yīng)用新版本并重啟
updateManager.applyUpdate()
})
updateManager.onUpdateFailed(function() {
// 新的版本下載失敗
wx.showModal({
title: '已經(jīng)有新版本了喲~',
content: '新版本已經(jīng)上線啦~,請(qǐng)您刪除當(dāng)前小程序,重新搜索打開喲~',
})
})
}
};
}
return {
getInstance: function(wx) {
if (!instance) {
instance = init(wx);
}
return instance;
}
};
})();
接下來(lái),在
app.vue
文件中引入這個(gè)模塊并在適當(dāng)?shù)纳芷阢^子中調(diào)用檢查更新的方法:
<script>
import updateAppSingleton from './updateAppSingleton.js';
export default {
onLaunch: function() {
// #ifdef MP-WEIXIN
const updateApp = updateAppSingleton.getInstance(wx);
updateApp.checkForUpdate();
// #endif
},
onShow: function() {
// #ifdef MP-WEIXIN
const updateApp = updateAppSingleton.getInstance(wx);
updateApp.checkForUpdate();
// #endif
},
onHide: function() {
console.log('App Hide')
},
methods: {
}
}
</script>
在實(shí)際開發(fā)和測(cè)試過(guò)程中,需要注意以下幾點(diǎn):
- 調(diào)試更新流程: 最新版本的微信開發(fā)者工具提供了強(qiáng)制更新的調(diào)試能力,通過(guò)編譯模式 - 編輯編譯模式 - 勾上「下次編譯時(shí)模擬更新」即可在開發(fā)者工具上調(diào)試強(qiáng)制更新功能。。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-823135.html
-
版本概念限制: 小程序的
開發(fā)版和體驗(yàn)版并無(wú)明確的版本
概念,因此無(wú)法在這些環(huán)境下真實(shí)地測(cè)試版本更新情況。為了驗(yàn)證更新功能,你需要將應(yīng)用上傳至線上版本,并發(fā)布新版本進(jìn)行測(cè)試。 - 如果第一個(gè)新版本添加了更新邏輯本身,而用戶是在沒有此更新邏輯的舊版本上運(yùn)行,那確實(shí)需要用戶至少更新到包含該更新邏輯的第一個(gè)新版本后,再進(jìn)行下一次版更新才能驗(yàn)證更新機(jī)制是否有效。就是你得發(fā)布兩個(gè)版本你才能驗(yàn)證更新機(jī)制是否有效
通過(guò)以上步驟,我們成功實(shí)現(xiàn)了基于微信小程序提供的wx.getUpdateManager
接口的用戶手動(dòng)更新功能,確保用戶可以及時(shí)獲取并應(yīng)用最新的小程序版本,提升整體的用戶體驗(yàn)。同時(shí),借助單例模式的設(shè)計(jì),使得更新邏輯得以復(fù)用且易于維護(hù)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-823135.html
到了這里,關(guān)于優(yōu)化微信小程序更新體驗(yàn):異步更新與強(qiáng)制更新方案解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!