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

时间:2024-02-23 10:09:27
 
起初小程序上线时,微信限制了代码包不能超过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 中。