自学微信小程序开发第九天-关于分包

2023-10-27


分包指的是把一个完整的小程序项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时可以按照需求进行加载。分包对于开发团队来说可以更好的解耦协作,对于用户来说可以优化小程序首次启动的下载时间。

另对于微信小程序来说,是对项目大小有限制的。在开发工具的详情 => 项目配置中可以看到,不使用分包时总大小只能有 2M ,使用分包时每个分包大小为 2M ,总大小为 20M(网上有些说是16M,具体的可以查看自己的项目配置) ,所以当项目大小到一定程度后,必须进行分包。

分包前后的项目构成

分包前所有的页面和资源是打包到一起的,使用时全部下载到本地。而分包后项目由一个主包和若干个分包组成。

  • 主包:一般只包含项目的启动页面或 TabBar 页面,以及所有分包都需要使用到的公共资源。
  • 分包:只包含和当前分包有关的页面和私有资源。

分包的加载规则

小程序启动时,会按照一下规则进行加载:

  1. 首先默认下载主包,并启动主包内的页面
    tabBar 页面需要放到主包中
  2. 当用户进入到分包内的页面时,客户端会下载相应的分包,下载完再进行展示。
    非 tabBar 页面可以按照功能的不同,划分为不同的分包之后,按需下载。

文件分配

一般分包后小程序项目的目录结构分为4部分:

  1. 包含 app.js 、app.json 、app.wxss 在内的应用全局代码
  2. pages 文件夹,存放主包的所有页面
  3. 若干自定义的分包文件夹,用于存放分包的页面
  4. 包括 utils 等存放公共资源文件的文件夹

所以主包就包括了1、2、4项所包含的文件,而第3项则是分包文件。

分包的配置定义

分包在 app.json 中进行定义。类似于主包页面在 app.json 里的 pages 节点中被定义,分包在 app.json 里同一级别的 subpackages 节点中被定义。 subpackages 定义的是个对象数组,每个对象成员就是一个分包,其包含4个字段:

字段 类型 说明
root String 分包的根目录
name String 分包的别名,分包预下载时使用
pages String Array 分包页面路径,相对于分包根目录
independent Boolean 是否独立分包

分包的一些原则

打包原则

  • 声明 subpackages 后,将按 subpackages 配置路径进行打包,subpackages 配置路径外的目录将被打包到主包中
  • 主包也可以有自己的 pages,即最外层的 pages 字段
  • subpackage 的根目录不能是另外一个 subpackage 内的子目录,即不能互相嵌套
  • tabBar 页面必须在主包内

引用原则

  • 主包无法引用分包内的私有资源
  • 分包之间不能相互引用私有资源
  • 分包可以引用主包内的公共资源

分包举例

使用以下目录结构进行举例
├── app.js
├── app.json
├── app.wxss
├── packageA
│ └── pages
│ ├── cat
│ └── dog
├── packageB
│ └── pages
│ ├── apple
│ └── banana
├── pages
│ ├── index
│ └── logs
└── utils
则分包的配置代码为:

{
  "pages":[			// 主包页面
    "pages/index",
    "pages/logs"
  ],
  "subpackages": [		
    {						// 分包1
      "root": "packageA",
      "pages": [
        "pages/cat",
        "pages/dog"
      ]
    }, {					// 分包2
      "root": "packageB",
      "name": "pack2",
      "pages": [
        "pages/apple",
        "pages/banana"
      ]
    }
  ]
}

独立分包

独立分包是一种特殊类型的分包,可以独立于主包和其他分包单独运行。通常用户会从主包进入小程序,但是特殊情况时从独立分包中页面进入小程序,不需要下载主包。当用户进入普通分包或主包内页面时,主包才会被下载。因此独立分包和主包以及其他分包之间是相互隔离的。

独立分包的应用场景举例

在以往程序中,普通用户和管理员用户所访问的页面是完全不同的。在小程序中,就可以将管理员页面作为独立分包,能够大幅提升分包页面的启动速度。 一个小程序中可以有多个独立分包,以应对不同场景。

声明独立分包

在分包的 subpackages 字段中,使用 "independent": true来声明此分包为独立分包。

进入独立分包页面

因为小程序的默认进入页面是 pages 配置的第一个页面,所以直接打开小程序时是需要加载主包的。进入独立分包页面而不加载主包的场景从网上搜索的结果看来,应该是通过其他方式跳转路径打开而绕过主包。猜想是类似通过其他小程序跳转等方式进行的,这个有待测试。

分包预下载

在进入小程序某个页面时,由框架自动预下载可能需要的分包,提升进入后续分包页面时的启动速度。对于独立分包,也可以预下载主包。
预下载分包行为在进入某个页面时触发,通过在 app.json 增加 preloadRule 配置来控制。preloadRule 的成员为键值对是页面路径,是进入此页面时的预下载配置。的配置有2项:

字段 类型 必填 默认值 说明
packages String Array 进入页面后预下载分包的rootname_APP_表示主包
network String wifi 在指定的网络下进行预下载,可选值为:all不限网络/wifi仅限wifi下

例:

{
  "pages": ["pages/index"],
  "subpackages": [
    { "root": "important", "pages": ["index"], },
    { "root": "sub1", "pages": ["index"], },
    { "name": "hello", "root": "path/to",  "pages": ["index"] },
    { "root": "sub3", "pages": ["index"] },
    { "root": "indep", "pages": ["index"], "independent": true }
  ],
  "preloadRule": {
    "pages/index": { "network": "all", "packages": ["important"] },
    "sub1/index": { "packages": ["hello", "sub3"] },
    "sub3/index": { "packages": ["path/to"] },
    "indep/index": { "packages": ["__APP__"] }
  }
}

需要注意的是,同一个分包中的页面享有共同的预下载大小限额 2M,限额会在工具中打包时校验。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自学微信小程序开发第九天-关于分包 的相关文章

  • 【MySQL】8.0 存储引擎

    存储引擎 MySQL体系结构 1 连接层 最上层是一些客户端和链接服务 包含本地sock 通信和大多数基于客户端 服务端工具实现的类似于TCP IP的通信 主要完成一些类似于连接处理 授权认证 及相关的安全方案 在该层上引入了线程池的概念
  • 测试用例如何编写?史上最全接口测试-用例编写设计总结(测试点)

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • wireshark通常无法抓取交换机所有端口报文

    Wireshark 是一种网络分析工具 它通常在计算机的网络接口上进行数据包捕获和分析 然而 Wireshark 默认情况下无法直接捕获交换机所有端口的报文 交换机是一种网络设备 它在局域网内转发数据包 根据目的MAC地址将数据包仅发送到目
  • 使用宏定义判断编译器类型、版本、操作系统

    使用宏定义如下 GCC编译器 ifdef GNUC if GNUC gt 3 GCC3 0以上 MSVC编译器 ifdef MSC VER if MSC VER gt 1000 VC 4 0以上 if MSC VER gt 1100 VC
  • z-index最大值,最小值,在不同浏览器的取值

    z index最大值 IE FireFox Safari的z index最大值是2147483647 Opera的最大值是2147483584 IE Safari Opera在超过其最大值时按最大值处理 FireFox 在超过最大值时会数据
  • unity3d 游戏对象消失三种方法的区别(enabled/Destroy/active)

    gameObject renderer enabled 是控制一个物体是否在屏幕上渲染或显示 而物体实际还是存在的 只是想当于隐身 而物体本身的碰撞体还依然存在的 GameObject Destroy 表示移除物体或物体上的组件 代表销毁该
  • AOP拦截记录日志

    首先对于AOP切面编程 我也是刚学习 了解不深 这边先引用老张的博客 方便大家学习 首先想一想 如果有这么一个需求 要记录整个项目的接口和调用情况 当然如果只是控制器的话 还是挺简单的 直接用一个过滤器或者一个中间件 还记得咱们开发Swag
  • linux 服务器间通信,Linux 下的进程间通信:套接字和信号

    原标题 Linux 下的进程间通信 套接字和信号 Linux 中国 学习在 Linux 中进程是如何与其他进程进行同步的 Marty Kalin 本篇是 Linux 下 IPC 系列的第三篇同时也是最后一篇文章 聚焦在通过共享存储 文件和共

随机推荐

  • Unity 3D实现血量增加减少

    首先先看一下效果图 这里呢我是通过按钮点击增减血量 当真正的开发游戏的时候 就是通过个各种药水来对AI进行血量的增加减少 场景塔搭建就比较简单了 就是一个NGUI 放置一张图片 HUDText ht UISprite sprite bool
  • xpath无法定位tbody

    原因是需要定位的tbody标签是浏览器加上去的 html中的tbody标签是不需要一定要写的 链接直接请求到的html是没有需要定位的tbody标签的 所以删掉xpath中的tbody标签就可以了 华东师范大学招生办 高考分数查询https
  • CNN卷积神经网络实现-人脸性别识别模型-可视化各层卷积特征

    本文主要是实现了根据人脸识别性别的卷积神经网络 并对卷积过程中的提取特征进行了可视化 Github地址 https github com chenlinzho 卷积神经网络 卷积神经网络最早是为了解决图像识别的问题 现在也用在时间序列数据和
  • Java踩坑笔记 —— base64转换为图片后图片显示不全

    Java踩坑笔记 base64转换为图片后图片显示不全 前言 解决思路 案例代码 结束语 前言 最近在开发项目中 发现base64转换图片时 出现了图片显示不全 例如如下这样 可以明显看到图片部分地区被遮挡 解决思路 显示图片有误的情况下
  • Apache Superset 漏洞导致服务器易遭RCE攻击

    聚焦源代码安全 网罗国内外最新资讯 编译 代码卫士 Apache Superset 修复了两个漏洞 本可导致攻击者在受影响系统上获得远程代码执行权限 Apache Superset 更新版本 2 1 1 修复了两个漏洞CVE 2023 39
  • Makefile 函数 -if

    if 函数 if 函数的语法是 if
  • Python网络爬虫入门篇

    1 Python爬虫基本流程 a 发送请求 使用http库向目标站点发起请求 即发送一个Request Request包含 请求头 请求体等 Request模块缺陷 不能执行JS 和CSS 代码 b 获取响应内容 如果requests的内容
  • 为OpenWrt添加service,自启动问题

    记得去年 写过一个程序 是运行在OpenWrt上的 想让程序开机自启动 最后费了9牛二虎之力 模仿别人的总算写出来了 但是一直没有明白为什么要这样 刚刚看open的官网 一下子恍然大悟 网址如 http wiki openwrt org d
  • YARN的工作机制

    lt 1 gt 主要作用 强化控制和使用资源管理功能 lt 2 gt 工作机制 1 MapReduce提交到客户端所在节点 2 客户端向资源管理器提交申请 在将应用程序返回给客户端 将运行资源提交到HDFS上 提交完毕后申请运行 3 RM将
  • Laravel框架06:文件、迁移填充、会话、缓存

    Laravel框架06 文件 迁移填充 会话 缓存 一 文件上传 1 文件上传表单 2 上传业务处理 3 全部代码 二 数据表的迁移与填充 1 迁移文件 创建迁移文件 编写迁移文件 执行迁移文件 回滚迁移文件 2 填充 种子 文件 创建填充
  • App天气预报

    模仿墨迹天气的UI 实现南京天气的查询 涉及知识点 解析请求到的json数据 未来天气 天气图标的设置 时间算法 根据今天周几 判断明后天是周几 三元运算符 取模 下载相关天气的代码 查看 未来天气 在map里面添加图标 根据获取到的天气信
  • Unity热更新 ILRuntime 从零开始 委托 Delegate(四)

    小姐姐镇楼 便于通过图片查找文章 我们继续来一起看下ILRuntime的第三个案例 Delegate 委托 这是这一系列文章的总目录链接 有疑问的可以先看下之前的文章 Unity热更新 ILRuntime 从零开始 委托 Delegate
  • python确定指标权重_python 实现熵权法确定各指标的权重

    python 实现熵权法确定各指标的权重 熵权法是一种客观赋权方法 计算步骤如下 a 构建各年份各评价指标的判断矩阵 b 将判断矩阵进行归一化处理 得到归一化判断矩阵 c 根据熵的定义 根据各年份评价指标 可以确定评价指标的熵 d 定义熵权
  • Python Logging

    一 简介 Python的logging模块提供了一种灵活的方式来记录日志信息 使用logging模块 你可以将日志记录到文件 控制台 syslog等不同的目标中 还可以根据日志级别过滤日志信息 logging模块还支持多个日志处理器和多个日
  • Unix and perl primer for Biologists - Part2 :Advanced Unix- Reading Notes(U33-U36)

    U33 Match making search files to find lines that match a certain pattern The Unix command grep does this and much more T
  • 上海链节科技:区块链产业正在蓬勃发展

    2020年是区块链发展的关键之年 疫情加速了人类向数字世界迁移的步伐 这一年 区块链作为新技术基础设施被纳入 新基建 范围内 各地纷纷出台规划扶持区块链产业发展 这一年 我国率先在深圳和苏州进行了央行数字人民币的投放试验 多个省市都搭建了城
  • Fabric Kafka入门

    Hyperledger Fabric推荐Kafa用于生产环境 Kafa是一个分布式 具有水平伸缩能力 崩溃容错能力的日志系统 在Hyperledger Fabric区块链中可以有多个Kafka节点 使用zookeeper进行同步管理 本文将
  • SpringSecurity实现前后端分离登录授权详解

    在介绍完SpringSecurity实现前后端分离认证之后 然后就是SpringSecurity授权 在阅读本文章之前可以先了解一下作者的上一篇文章SpringSecurity认证SpringSecurity实现前后端分离登录token认证
  • 高德地图、使用vue-amap实现地图的点击地址和经纬度的转换并显示

    高德地图 使用vue amap实现地图的点击地址和经纬度的转换并显示 vue amap安装和使用 基于 Vue 2 0 和高德地图 ElementUI 1 npm 安装 npm install vue amap save CDN方式 2 m
  • 自学微信小程序开发第九天-关于分包

    自学微信小程序开发第九天 关于分包 分包前后的项目构成 分包的加载规则 文件分配 分包的配置定义 分包的一些原则 打包原则 引用原则 分包举例 独立分包 独立分包的应用场景举例 声明独立分包 进入独立分包页面 分包预下载 分包指的是把一个完