微信小程序分包

小程序的包分为主包、分包、独立分包

整个小程序所有分包大小不超过20M,单个分包或主包大小不能超过2M

1、主包

主包是指小程序的主体部分,它包含了小程序的全局代码和一些必要的资源文件。用户在首次打开小程序时,主包是必须加载的,因此主包的大小直接影响到小程序的启动速度。

2、分包

subpackages

分包是小程序的辅助部分,依赖于主包,它允许开发者将小程序的代码和资源分割成多个子包。每个分包可以包含一组页面和相关的脚本、样式和资源文件。用户在访问特定页面时,只有该页面所属的分包会被加载,而其他分包则不会被加载,这样可以减少单次加载的数据量。

  1. 减少首包大小:通过将代码分割,可以减少首次加载时需要加载的代码量。
  2. 按需加载:用户只有在访问特定页面时才需要加载对应的分包,提高了加载效率。
  3. 独立更新:分包可以独立于主包进行更新,有助于快速迭代和修复特定功能。
{
  "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。

  1. 独立加载:独立分包可以被小程序独立加载,不依赖于主包。
  2. 共享代码:多个小程序可以共享同一个独立分包,减少代码冗余。
  3. 独立更新:独立分包可以独立于主包和其他分包进行更新。

独立分包可以独立于主包和其他分包运行。从独立分包中页面进入小程序时,不需要下载主包。当用户进入普通分包或主包内页面时,主包才会被下载。

独立分包属于分包的一种,普通分包的所有限制都对独立分包有效。

当用户从独立分包页面启动小程序时,主包不存在,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环境下才会预下载。

你可能感兴趣的:(小程序)