微信小程序分包加載功能
隨著微信小程序和微信小游戲的玩法越來越豐富,微信小程序開發(fā)者對(duì)于擴(kuò)大包大小的需求越來越強(qiáng)烈,所以微信官方團(tuán)隊(duì)推出了小游戲分包加載這個(gè)功能。所謂的微信小程序分包加載,即把游戲內(nèi)容按一定規(guī)則拆分這幾包,在首次啟動(dòng)時(shí)先下載必要的包,這個(gè)必要的包稱之為「主包」,微信小程序開發(fā)者可以在主包內(nèi)觸發(fā)其它分包的下載,從而把首次啟動(dòng)的下載耗時(shí)分散到游戲運(yùn)行中。目前微信小程序分包加載大小的限制為: 整個(gè)小游戲所有分包大小不超過 8M和單個(gè)分包/主包大小不能超過 4M。
微信小程序分包加載功能
微信小程序分包加載的使用方法
1. 分包配置
需要先在 game.json 配置分包信息。
假設(shè)游戲的目錄結(jié)構(gòu)如下:
├── game.js ├── game.json ├── images │ ├── a.png │ ├── b.png ├── stage1 │ └── game.js │ └── images │ ├── 1.png │ ├── 2.png └── stage2.js
game.json 中的配置:
{ ... subpackages: [ { name: 'stage1', root: 'stage1/' // 可以指定一個(gè)目錄,目錄根目錄下的 game.js 會(huì)作為入口文件,目錄下所有資源將會(huì)統(tǒng)一打包 }, { name: 'stage2', root: 'stage2.js' // 也可以指定一個(gè) JS 文件 } ] ... }
配置在 subpackages 字段內(nèi)的目錄或 js 文件,將按照配置打包成一個(gè)個(gè)「分包」,沒有配置在 subpackages 中的目錄和 js,將會(huì)被打包到主包中。
2. 分包加載
我們提供了 wx.loadSubpackage() API 來觸發(fā)分包的下載,調(diào)用 wx.loadSubpackage 后,將觸發(fā)分包的下載與加載,在加載完成后,通過 wx.loadSubpackage 的 success 回調(diào)來通知加載完成。
同時(shí),wx.loadSubpackage 會(huì)返回一個(gè) LoadSubpackageTask,可以通過 LoadSubpackageTask 獲取當(dāng)前下載進(jìn)度。
示例代碼:
const loadTask = wx.loadSubpackage({ name: 'stage1', // name 可以填 name 或者 root success: function(res) { // 分包加載成功后通過 success 回調(diào) }, fail: function(res) { // 分包加載失敗通過 fail 回調(diào) } }) loadTask.onProgressUpdate(res => { console.log('下載進(jìn)度', res.progress) console.log('已經(jīng)下載的數(shù)據(jù)長度', res.totalBytesWritten) console.log('預(yù)期需要下載的數(shù)據(jù)總長度', res.totalBytesExpectedToWrite) })
老版本兼容
由微信后臺(tái)編譯來處理舊版本客戶端的兼容,后臺(tái)會(huì)編譯兩份代碼包,一份是分包后代碼,另外一份是整包的兼容代碼。對(duì)于老客戶端,會(huì)去下載整包代碼啟動(dòng)。
開發(fā)者在基礎(chǔ)庫 2.1.0 以下的版本不需要調(diào)用 wx.loadSubpackage 觸發(fā)加載,2.1.0 以下版本不存在 wx.loadSubpackage 方法。
已知 BUG
目前 Android 無法加載分包下的字體文件,預(yù)計(jì)在下個(gè)微信客戶端版本修復(fù)。
LoadSubpackageTask wx.loadSubpackage(Object object)
基礎(chǔ)庫 2.1.0 開始支持,低版本需做兼容處理
觸發(fā)分包加載,詳見 分包加載
參數(shù)
Object object
屬性 | 類型 | 默認(rèn)值 | 是否必填 | 說明 | 支持版本 |
---|---|---|---|---|---|
name | function | 是 | 分包的名字,可以填 name 或者 root | ||
success | function | 是 | 分包加載成功回調(diào)事件 | ||
fail | function | 是 | 分包加載失敗回調(diào)事件 | ||
complete | function | 是 | 分包加載結(jié)束回調(diào)事件(加載成功、失敗都會(huì)執(zhí)行) |
返回值
LoadSubpackageTask
加載分包任務(wù)實(shí)例,用于獲取分包加載狀態(tài)
LoadSubpackageTask.onProgressUpdate(function callback)
基礎(chǔ)庫 2.1.0 開始支持,低版本需做兼容處理
監(jiān)聽分包加載進(jìn)度變化事件
參數(shù)
callback
監(jiān)聽事件的回調(diào)函數(shù)
callback 回調(diào)函數(shù)
參數(shù)
res
屬性 | 類型 | 說明 | 支持版本 |
---|---|---|---|
progress | number | 分包下載進(jìn)度百分比 | |
totalBytesWritten | number | 已經(jīng)下載的數(shù)據(jù)長度,單位 Bytes | |
totalBytesExpectedToWrite | number | 預(yù)期需要下載的數(shù)據(jù)總長度,單位 Bytes |
掃二維碼手機(jī)查看該文章