微信小程序 - 分包加载

embedded/2025/2/13 23:14:21/

分包加载

小程序的代码通常是由许多页面、组件以及资源等组成,随着小程序功能的增加,代码量也会逐渐增加,体积过大就会导致用户打开速度变慢,影响用户的使用体验。

分包加载是一种小程序优化技术。将小程序不同功能的代码,分别打包成不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载,在构建小程序分包项目时,构建会输出一个或多个分包。每个使用分包小程序必定含有一个主包。每个分包可以包含多个页面、组件、样式和逻辑等。当小程序需要使用某个分包时,才会加载该分包中的代码。

主包: 包含默认启动页面 / TabBar 页面 以及 所有分包都需用到公共资源的包

分包: 根据开发者的配置进行划分出来的子包

小程序分包后加载方式

小程序启动时,默认会下载主包并启动主包内页面,在用户访问分包内某个页面时,微信客户端才会把对应分包下载下来,下载完成后再进行展示。

目前小程序分包大小有以下限制:**

  1. 整个小程序所有分包大小不超过 20MB
  2. 单个分包/主包大小不能超过 2MB

注意事项

​ 整个小程序所有分包大小可能会随时调整,截止到目前整个小程序所有分包大小不超过 20M

分包的基本使用

在进行分包加载之前,需要对小程序的业务逻辑进行分析,将代码划分成多个模块。每个模块应该有一个明确的功能,并与其他模块之间有明确的依赖关系

需要按照功能拆分分包,并且每个分包都需要与其他包有依赖关系(可以通过 a 分包跳转到 b 分包)

开发者在小程序的配置文件 app.json 中,通过 subPackages 或者 subpackages字段声明项目分包结构。

每个分包需要指定 root 字段、name 字段和 pages 字段

  1. root 字段指定了分包的根目录,该目录下的所有文件都会被打包成一个独立的包
  2. name 字段为分包的名称,用于在代码中引用该分包
  3. pages 字段指定了该分包中包含的页面,可以使用通配符 * 匹配多个页面
{"subPackages": [{"root": "modules/goodModule","name": "goodModule","pages": ["pages/list/list","pages/detail/detail"]},{"root": "modules/marketModule","name": "marketModule","pages": ["pages/market/market"]}]}

打包和引用原则(注意事项)

打包原则:

  1. tabBar 页面必须在主包内

  2. 最外层的 pages 字段,属于主包的包含的页面

  3. 按 subpackages 配置路径进行打包,配置路径外的目录将被打包到主包中

  4. 分包之间不能相互嵌套,subpackage 的根目录不能是另外一个 subpackage 内的子目录

引用原则:

  1. 主包不可以引用分包的资源,但分包可以使用主包的公共资源

  2. 分包与分包之间资源无法相互引用, 分包异步化时不受此条限制

独立分包的配置

独立分包

独立分包是小程序中一种特殊类型的分包,可以独立于主包和其他分包运行

从独立分包中页面进入小程序时,不需要下载主包,但是当用户进入普通分包或主包内页面时,主包才会被下载 !

开发者可以将功能相对独立的页面配置到独立分包中,因为独立分包不依赖主包即可运行,可以很大程度上提升分包页面的启动速度

如果是独立分包,不需要下载主包,直接就能够访问,独立分包是自己独立运行的

而如果是其他分包,需要先下载主包,通过路径访问,才能加载对应路径的分包

注意事项:

  1. 独立分包中不能依赖主包和其他分包中的资源

  2. 主包中的 app.wxss 对独立分包无效

  3. App 只能在主包内定义,独立分包中不能定义 App,会造成无法预期的行为

配置独立分包

开发者在app.json中找到需要配置为独立分包的subpackages字段

在该字段配置项中定义independent字段声明对应分包为独立分包。

{"subPackages": [{"root": "modules/goodModule","name": "goodModule","pages": ["pages/list/list","pages/detail/detail"]},{"root": "modules/marketModule","name": "marketModule","pages": ["pages/market/market"],
+       "independent": true}]
}

分包预下载

分包预下载是指访问小程序某个页面时,预先下载分包中的代码和资源,以提高用户的使用体验。当用户需要访问分包中的页面时,已经预先下载的代码和资源可以直接使用,通过分包预下载加快了页面的加载速度和显示速度

小程序的分包预下载需要在 app.json 中通过 preloadRule 字段设置预下载规则。preloadRule 是一个对象,对象的 key 表示访问哪个路径时进行预加载,value 是进入此页面的预下载配置,具有两个配置项:

字段类型必填默认值说明
packagesStringArray预下载的分包名称,进入页面后预下载分包的 rootname
__APP__ 表示主包。
networkStringwifi在指定网络下预下载,
可选值为: all: 不限网络 wifi: 仅wifi下预下载
{"subPackages": [{"root": "modules/goodModule","name": "goodModule","pages": ["pages/list/list","pages/detail/detail"]},{"root": "modules/marketModule","name": "marketModule","pages": ["pages/market/market"],"independent": true}],"preloadRule": {"pages/index/index": {"network": "all","packages": ["modules/goodModule"]},"modules/marketModule/pages/market/market": {"network": "all","packages": ["__APP__"]}}
}
{"pages": ["pages/index/index","pages/user/user"],"subPackages": [{"root": "pages/music","name": "music","pages": ["player/player","lyric/lyric"]},{"root": "pages/settings","name": "settings","pages": ["theme/theme","language/language"]}],"preloadRule": {"pages/music/player/player": {"packages": ["settings"],"network": "wifi"}}
}

http://www.ppmy.cn/embedded/161987.html

相关文章

ADB的安装和使用

文章目录 前言一、ADB是什么?一、ADB的基本概念二、ADB的主要功能三、ADB在Linux系统中的安装与使用四、ADB命令的示例 二、windows 安装ADB1.ADB不用安装,解压文件后添加环境变量即可2.测试是否能使用 三、与linux通信3.1 将 usb设备连接到虚拟机3.2.测…

python动物识别深度学习分析系统

✔️该系统基于 深度学习 中的 卷积神经网络(CNN),利用 TensorFlow 或 PyTorch 框架,针对动物图像进行高效的分类和识别。通过 数据增强技术(如旋转、缩放、裁剪等)扩展数据集,提高模型的鲁棒性…

自学网络安全(黑客技术)2025年 —100天学习计划

前言 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 如何成为一名黑客 很多朋友在学习安全方面都会半路转行&#xff0c…

java项目之基于web的中国古诗词的设计与实现源码(ssm+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的基于web的中国古诗词的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于web的中国…

掌握 CSS Flexbox 布局,轻松实现复杂网页设计

系列文章目录 01-从零开始学CSS选择器:属性选择器与伪类选择器完全指南 02-避免样式冲突:掌握CSS选择器优先级与层叠规则的终极指南 03-如何精确掌控网页布局?深入解析 CSS 样式与盒模型 04-CSS 布局全面解析:从传统浮动到现代 F…

MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 基础篇 part 11

第11章_数据处理之增删改 首先得先有一个表: #0. 储备工作 USE atguigudb;CREATE TABLE IF NOT EXISTS emp1( id INT, name VARCHAR(15), hire_date DATE, salary DOUBLE(10,2) );DESC emp1;SELECT * FROM emp1; 1.增加数据 #方式1:一条一条的添加…

linux 的文件操作

不得不提 vi 文件编辑器了,除了vi 编辑器,还支持对文件的去重、排序、topN、字符统计 查找字符串(找大日志): 如果我们想要在一个大文件中查找某一个字符串进行修改,按照我们现在学习的知识,通…

kafka topic是什么?partition是什么? broker是什么?

在 Apache Kafka 中,理解 topic、partition 和 broker 是掌握其工作原理的基础。以下是对这些概念的详细解释: 1. Topic(主题) 定义:Topic 是 Kafka 中的基本消息类别或类别。它类似于数据库中的表,是消息…