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