分包加載
背景
微信官方出于小程序的啟動速度的考慮猴贰,對代碼包的大小進(jìn)行了限制对雪。但是同樣也限制了小程序功能的擴(kuò)展,為了解決這個(gè)矛盾米绕,微信官方提供了分包加載這個(gè)功能
分包加載的介紹
大部分小程序都會由某幾個(gè)功能組成瑟捣,通常這幾個(gè)功能之間是獨(dú)立的,但會依賴一些公共的邏輯义郑,并且這些功能通常會對應(yīng)某幾個(gè)獨(dú)立的頁面蝶柿。那么小程序代碼的打包,大可不必一定要打成一個(gè)非驮,可以按照功能的劃分交汤,拆分成幾個(gè)分包,當(dāng)需要用到某個(gè)功能時(shí)劫笙,才加載這個(gè)功能對應(yīng)的分包芙扎。
對于用戶來說,小程序加載流程變成了:
首次啟動時(shí)填大,先下載小程序主包戒洼,顯示主包內(nèi)的頁面;
如果用戶進(jìn)入了某個(gè)分包的頁面允华,再下載這個(gè)對應(yīng)分包圈浇,下載完畢后,顯示分包的頁面靴寂。
采用分包加載磷蜀,對開發(fā)者而言,能使小程序有更大的代碼體積百炬,承載更多的功能與服務(wù)褐隆;而對用戶而言,可以更快地打開小程序剖踊,同時(shí)在不影響啟動速度前提下使用更多功能庶弃。
分包的劃分
在配置前首先需要開發(fā)者規(guī)劃下各個(gè)分包需要容納的內(nèi)容衫贬,我們建議開發(fā)者按照功能劃分的的原則,將同一個(gè)功能下的頁面和邏輯放置于同一個(gè)目錄下歇攻,對于一些跨功能之間公共邏輯固惯,將其放置于主包下,這樣可以確保在分包引用這部分功能時(shí)掉伏,這部分的邏輯一定存在缝呕。
在分包劃分時(shí),應(yīng)該注意以下事項(xiàng):
避免分包與分包之間引用上的耦合斧散。因?yàn)榉职募虞d是由用戶操作觸發(fā)的供常,并不能確保某分包加載時(shí),另外一個(gè)分包就一定存在鸡捐,這個(gè)時(shí)候可能會導(dǎo)致 JS 邏輯異常的情況栈暇,例如報(bào)「"xxx.js" is not defined」這樣的錯(cuò)誤;
一些公共用到的自定義組件箍镜,需要放在主包內(nèi)源祈。
在同一文件夾下
{
"pages":[
"pages/index",
"pages/logs"
],
"subPackages": [
{
"root": "packageA",
"pages": [
"pages/cat",
"pages/dog"
]
}, {
"root": "packageB",
"pages": [
"pages/apple",
"pages/banana"
]
}
]
}
在不同文件夾下
{
"pages":[
"pages/index",
"pages/logs"
],
"subPackages": [
{
"root": "packageA",
"pages": [
"pages/packageA/cat",
"pages/packageA/dog"
]
}, {
"root": "packageB",
"pages": [
"pages/packageB/apple",
"pages/packageB/banana"
]
}
]
}