微信小程序 --- 分包加载

news2024/11/15 10:56:10

分包加载

1. 什么是分包加载

什么是分包加载

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

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

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

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

在这里插入图片描述

小程序分包后如何加载

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

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

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

📌 注意事项

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

2. 分包的基本使用

知识点:

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

需要按照功能拆分分包,并且每个分包都需要与其他包有依赖关系(可以通过 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"
      ]
    }
  ]

}

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

打包原则:

  1. tabBar 页面必须在主包内

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

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

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

引用原则:

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

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

4. 独立分包的配置

什么是独立分包

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

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

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

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

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

📌 注意事项:

  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
    }
  ]
}

5. 分包预下载

知识点:

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

小程序的分包预下载需要在 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.coloradmin.cn/o/1483485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB图像噪声添加与滤波

在 MATLAB 中添加图像噪声和进行滤波通常使用以下函数: 添加噪声:可以使用imnoise函数向图像添加各种类型的噪声,如高斯噪声、椒盐噪声等。 滤波:可以使用各种滤波器对图像进行滤波处理,例如中值滤波、高斯滤波等。 …

(三)电机控制之方波驱动无刷直流电机(BLDC)与正弦波驱动无刷直流电机(PMSM)的详细对比

电流控制方式和波形: 方波驱动:在每个换相周期内,定子绕组中的电流被切换为高或低两个状态,形成矩形波。通常采用六步换向法,即每60度电角度换相一次,从而产生转矩。正弦波驱动:定子绕组中流过的…

Doris实战——拈花云科的数据中台实践

前言 拈花云科 NearFar X Lab 团队调研并引进 Doris 作为新架构下的数据仓库选型方案。本文主要介绍了拈花云科数据中台架构从 1.0 到 2.0 的演变过程,以及 Doris 在交付型项目和 SaaS 产品中的应用实践。 一、业务背景 拈花云科的服务对象主要是国内各个景区、景点…

安卓虚拟机ART和Dalvik

目录 一、JVM和Dalvik1.1 基于栈的虚拟机字节码指令执行过程 1.2 基于寄存器的虚拟机 二、ART与Dalvikdex2aotAndroid N的运作方式 三、总结 一、JVM和Dalvik Android应用程序运行在Dalvik/ART虚拟机,并且每一个应用程序对应有一个单独的Dalvik虚拟机实例。 Dalvik…

四、西瓜书——支持向量机

第六章 支持向量机 1.间隔与支持向量 支持向量机的原理是寻找与支持向量具有最大间隔的划分超平面。支持向量机具有一个重要性质: 训练完成后,大部分的训练样本都不需保留,最终模型仅与支持向量有关. 首先,超平面的方程为: 点到超平面的距离为&#xff…

爬取博客的图片并且将它存储到响应的目录

目录 前言 思想 注意 不多说解释了,贴代码吧 config.json Get_blog_img.py 把之前的写的代码也贴上 Get_blog_id.py 主函数 main.py 运行结果 前言 在上一篇博客中我们介绍了如何爬取博客链接 利用python爬取本站的所有博客链接-CSDN博客文章浏览阅读74…

CSS转换(2D)transform属性及animation动画

1、倾斜效果&#xff0c;旋转效果 <style type"text/css"> .transrorm_bar{ padding:150px; display: flex; align-items: center;} .transrorm_bar div{ width: 120px; height: 120px; background-color: #eee; margin: 10px; display: flex; align-items: c…

爬虫入门到精通_实战篇8(分析Ajax请求并抓取今日头条美食美图)_界面上抓取Ajax方式

1 目标 目标&#xff1a; 抓取今日头条美食美图&#xff0c;如下&#xff1a; 一些网页直接请求得到的HTML代码并没有在网页中看到的内容&#xff0c;因为一些信息是通过Ajax加载&#xff0c;并通过js渲染生成的&#xff0c;这时就需要通过分析网页的请求来获取想要爬取的内容…

关于高德地图及其APP获取地图数据的研究

刚过完春节没几天&#xff0c;有个客户提出要获取高德地图的数据。 我看了下&#xff0c;回复说&#xff1a;这不是很简单嘛&#xff0c;高德有公开的开放平台&#xff0c;有足够的API支持用户获取数据&#xff0c;开发自己基于高德数据库的应用。 客户回复说&#xff1a;他的要…

【前端素材】推荐优质现代医院办公后台管理系统网页XRay平台模板(附源码)

一、需求分析 在线后台管理系统是指供管理员或运营人员使用的Web应用程序&#xff0c;用于管理和监控网站、应用程序或系统的运行和数据。它通常包括一系列工具和功能&#xff0c;用于管理用户、内容、权限、数据等。下面是关于在线后台管理系统的详细分析&#xff1a; 1、功…

【JavaSE】实用类——String、日期等

目录 String类常用方法String类的equals()方法String中equals()源码展示 “”和equals()有什么区别呢&#xff1f; StringBuffer类常用构造方法常用方法代码示例 面试题&#xff1a;String类、StringBuffer类和StringBuilder类的区别&#xff1f;日期类Date类Calendar类代码示例…

边缘计算与任务卸载基础知识

目录 边缘计算简介任务卸载简介参考文献 边缘计算简介 边缘计算是指利用靠近数据生成的网络边缘侧的设备&#xff08;如移动设备、基站、边缘服务器、边缘云等&#xff09;的计算能力和存储能力&#xff0c;使得数据和任务能够就近得到处理和执行。 一个典型的边缘计算系统为…

用GGUF和Llama.cpp量化Llama模型

用GGUF和Llama .cpp量化Llama模型 什么是GGML如何用GGML量化llm使用GGML进行量化NF4 vs. GGML vs. GPTQ结论 由于大型语言模型&#xff08;LLMS&#xff09;的庞大规模&#xff0c;量化已成为有效运行它们的必要技术。通过降低其权重的精度&#xff0c;您可以节省内存并加快推理…

uniapp npx update-browserslist-db@lates 问题解决

在uniapp运行项目时&#xff0c;会有这种报错&#xff0c;其实这是表明browserslistlatest版本低了&#xff0c;在催你升级版本&#xff0c;browserslistlatest是用来支持解析css用的&#xff0c;当然&#xff0c;你也可以直接忽略这个报错提示&#xff0c;也可以正常运行项目。…

【Git教程】(四)版本库 —— 存储系统,存储目录,提交对象及其命名、移动与复制~

Git教程 版本库 1️⃣ 一种简单而高效的存储系统2️⃣ 存储目录&#xff1a;Blob 与 Tree3️⃣ 相同数据只存储一次4️⃣ 压缩相似内容5️⃣ 不同文件的散列值相同6️⃣ 提交对象7️⃣ 提交历史中的对象重用8️⃣ 重命名、移动与复制&#x1f33e; 总结 事实上&#xff0c;我们…

带你玩转java封装和继承(上)

上次带大家学习了java里面比较重要的知识点类和对象&#xff0c;而且我们知道java是一门面向对象的语言&#xff0c;有时一个程序里可能有很多类&#xff0c;那么这么多类他们之间有什么联系吗&#xff1f;今天就带大家学习一下java类之间的关系。 什么是继承&#xff1a; 我们…

摄像机LookDirection参数对模型缩放灵敏度的影响

继续整上回的wpf 3d obj模型程序&#xff1b; 它用HelixToolKit加载了以后&#xff0c;默认可以用鼠标操作模型&#xff0c;中键缩放模型&#xff1b; 有的时候中键稍微滚动几下模型就不见了&#xff1b; 用不同的模型试了一下&#xff1b;中键缩放的灵敏度&#xff0c;就是…

FreeRTOS学习笔记-基于STM32(1)基础知识

一、裸机与RTOS 我们使用的32板子是裸机&#xff0c;又称前后台系统。裸机有如下缺点&#xff1a; 1、实时性差。只能一步一步执行任务&#xff0c;比如在一个while循环中&#xff0c;要想执行上一个任务&#xff0c;就必须把下面的任务执行完&#xff0c;循环一遍后才能执行…

BUGKU bp

打开环境&#xff0c;他提示了弱密码top1000&#xff0c;随便输入密码123抓包爆破 发现长度都一样&#xff0c;看一下响应发现一段js代码&#xff0c;若r值为{code: bugku10000}&#xff0c;则会返回错误&#xff0c;通过这一句“window.location.href success.php?coder.cod…

StarRocks——Stream Load 事务接口实现原理

目录 前言 一、StarRocks 数据导入 二、StarRocks 事务写入原理 三、InLong 实时写入StarRocks原理 3.1 InLong概述 3.2 基本原理 3.3 详细流程 3.3.1 任务写入数据 3.3.2 任务保存检查点 3.3.3 任务如何确认保存点成功 3.3.4 任务如何初始化 3.4 Exactly Once 保证…