小程序的包分为主包、分包、独立分包
整个小程序所有分包大小不超过20M,单个分包或主包大小不能超过2M
1、主包
主包是指小程序的主体部分,它包含了小程序的全局代码和一些必要的资源文件。用户在首次打开小程序时,主包是必须加载的,因此主包的大小直接影响到小程序的启动速度。
2、分包
subpackages
分包是小程序的辅助部分,依赖于主包,它允许开发者将小程序的代码和资源分割成多个子包。每个分包可以包含一组页面和相关的脚本、样式和资源文件。用户在访问特定页面时,只有该页面所属的分包会被加载,而其他分包则不会被加载,这样可以减少单次加载的数据量。
{
"pages": [
"pages/home/home",
"pages/message/message",
"pages/contact/contact",
"pages/shoplist/shoplist"
],
"subpackages": [
{
"root": "packageA",
"pages": [
"pages/cat/cat",
"pages/dog/dog "
]
}
]
}
3、独立分包
独立分包是微信小程序分包加载的一种特殊形式。与普通分包不同,独立分包可以被其他小程序直接引用,而不需要用户下载整个小程序。独立分包可以包含在小程序的
app.json 文件中的 "subpackages" 字段里,并且可以设置 "isIndependent" 属性为 true。
独立分包可以独立于主包和其他分包运行。从独立分包中页面进入小程序时,不需要下载主包。当用户进入普通分包或主包内页面时,主包才会被下载。
独立分包属于分包的一种,普通分包的所有限制都对独立分包有效。
当用户从独立分包页面启动小程序时,主包不存在,App 也不存在,此时调用 getApp() 获取到的是 undefined。 当用户进入普通分包或主包内页面时,主包才会被下载,App 才会被注册,此时调用 getApp() 可以获取到真正的 App。当从独立分包启动小程序时,主包中 App 的 onLaunch 和首次 onShow 会在从独立分包页面首次进入主包或其他普通分包页面时调用。
{
"pages": [
"pages/home/home",
"pages/message/message",
"pages/contact/contact",
"pages/shoplist/shoplist"
],
"subpackages": [
{
"root": "packageB",
"pages": [
"pages/apple/apple"
],
"independent": true
}
]
}
4、分包预下载
开发者可以通过配置,在进入小程序某个页面时,由框架自动预下载可能需要的分包,提升进入后续分包页面时的启动速度。对于独立分包,也可以预下载主包
预下载分包行为在进入某个页面时触发,通过 app.json 中的 preloadRule 配置来控制。
同一个分包中的页面享有共同的预下载大小限额 2M,限额会在工具中打包时校验。
示例:
{
"pages": [
"pages/home/home",
"pages/message/message",
"pages/contact/contact",
"pages/shoplist/shoplist"
],
"preloadRule": {
"pages/contact/contact": {
"packages": ["pack1"],
"network": "all"
}
}
}
pages/contact/contact:这是一个页面路径,当用户访问contact页面时,会触发预下载规则。
packages:指定了需要预下载的分包名称列表。在这个例子中,当访问contact页面时,会预下载pack1分包。
network:指定了预下载的网络条件。all表示在任何网络条件下都会进行预下载,而wifi则表示只有在Wi-Fi环境下才会预下载。