uni-app开发经验分享十四:小程序超过2M限制的方法——分包加载

  • A+
所属分类:Web前端
摘要

对小程序进行分包,可以优化小程序首次启动的下载时间,以及在多团队共同开发时可以更好的解耦协作。

 
起初小程序上线时,微信限制了代码包不能超过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 中。