|
起初小程序上線時,微信限制了代碼包不能超過1MB,后來功能變大變成了2M了,限制大小是出于對小程序啟動速度的考慮, 希望用戶在使用任何一款小程序時,都能獲得一種“秒開”體驗。但是,2MB也限制了小程序功能的擴展,小程序業(yè)務(wù)的發(fā)展 可能需要更大的體積。為了解決這個問題,微信推出了—分包加載。
小程序分包加載
對小程序進行分包,可以優(yōu)化小程序首次啟動的下載時間,以及在多團隊共同開發(fā)時可以更好的解耦協(xié)作。
目錄結(jié)構(gòu):
├── app.js
├── app.json
├── app.wxss
├── packageA
│ └── my
├── packageB
│ └── list
├── pages
│ ├── index
│ └── logs
└── utils
開發(fā)者通過在 app.json subpackages或subPackages 字段聲明項目分包結(jié)構(gòu):
{
"pages":[
"pages/index",
"pages/logs"
],
"subpackages": [
{
"root": "packageA",
"pages": [
"my"
]
}, {
"root": "packageB",
"name": "pack2",
"pages": [
"list"
]
}
]
}
分包預(yù)下載
開發(fā)者可以通過配置,在進入小程序某個頁面時,由框架自動預(yù)下載可能需要的分包,提升進入后續(xù)分包頁面時的啟動速度。對于獨立分包,也可以預(yù)下載主包。 分包預(yù)下載目前只支持通過配置方式使用,暫不支持通過調(diào)用API完成。
配置方法
預(yù)下載分包行為在進入某個頁面時觸發(fā),通過在 app.json 增加 preloadRule 配置來控制
{
"pages": ["pages/index"],
"subpackages": [
{
"root": "sub1",
"name": "hello",
"pages": ["index"],
},
{
"root": "sub2",
"pages": ["index"],
}
],
"preloadRule": {
"sub1/index": {
"packages": ["__APP__"]
},
"sub2/index": {
"packages": ["hello"]
}
}
}
preloadRule 中,key 是頁面路徑,value 是進入此頁面的預(yù)下載配置,每個配置有以下幾項:
| 字段 | 類型 | 必填 | 默認(rèn)值 | 說明 |
| packages |
StringArray |
是 |
無 |
進入頁面后預(yù)下載分包的 root 或 name。__APP_表示主包。 |
| network |
String |
否- |
wifi |
在指定網(wǎng)絡(luò)下預(yù)下載,可選值為:all: 不限網(wǎng)絡(luò),wifi: 僅wifi下預(yù)下載 |
打包原則
聲明 subpackages 后,將按 subpackages 配置路徑進行打包,subpackages 配置路徑外的目錄將被打包到 app(主包) 中tabBar 頁面必須在 app(主包)內(nèi)
分包加載的低版本兼容
由微信后臺編譯來處理舊版本客戶端的兼容,后臺會編譯兩份代碼包,一份是分包后代碼,另外一份是整包的兼容代碼。 新客戶端用分包,老客戶端還是用的整包,完整包會把各個 subpackage 里面的路徑放到 pages 中。
|