起初小程序上线时,微信限制了代码包不能超过1MB,后来功能变大变成了2M了,限制大小是出于对小程序启动速度的考虑,
希望用户在使用任何一款小程序时,都能获得一种“秒开”体验。但是,2MB也限制了小程序功能的扩展,小程序业务的发展
可能需要更大的体积。为了解决这个问题,微信推出了—分包加载。
小程序分包加载
对小程序进行分包,可以优化小程序首次启动的下载时间,以及在多团队共同开发时可以更好的解耦协作。
目录结构:
├── app.js ├── app.json ├── app.wxss ├── packageA │ └── my ├── packageB │ └── list ├── pages │ ├── index │ └── logs └── utils
开发者通过在 app.json subpackages或subPackages 字段声明项目分包结构:
{ "pages":[ "pages/index", "pages/logs" ], "subpackages": [ { "root": "packageA", "pages": [ "my" ] }, { "root": "packageB", "name": "pack2", "pages": [ "list" ] } ] }
分包预下载
开发者可以通过配置,在进入小程序某个页面时,由框架自动预下载可能需要的分包,提升进入后续分包页面时的启动速度。对于独立分包,也可以预下载主包。
分包预下载目前只支持通过配置方式使用,暂不支持通过调用API完成。
配置方法
预下载分包行为在进入某个页面时触发,通过在 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 是进入此页面的预下载配置,每个配置有以下几项:
字段 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
packages | StringArray | 是 | 无 | 进入页面后预下载分包的 root 或 name。__APP_表示主包。 |
network | String | 否- | wifi | 在指定网络下预下载,可选值为:all: 不限网络,wifi: 仅wifi下预下载 |
打包原则
声明 subpackages 后,将按 subpackages 配置路径进行打包,subpackages 配置路径外的目录将被打包到 app(主包) 中tabBar 页面必须在 app(主包)内
分包加载的低版本兼容
由微信后台编译来处理旧版本客户端的兼容,后台会编译两份代码包,一份是分包后代码,另外一份是整包的兼容代码。 新客户端用分包,老客户端还是用的整包,完整包会把各个 subpackage 里面的路径放到 pages 中。