跨平台应用开发进阶(六十五):小程序分包策略及实战讲解

news2024/10/5 22:22:21

文章目录

    • 一、前言
    • 二、为什么要使用分包?
    • 三、分包大小查看
    • 四、如何使用分包?
    • 五、独立分包
    • 六、分包预下载
    • 七、项目实战
    • 八、拓展阅读

一、前言

微信小程序开发过程中,随着业务不断迭代,程序包的体积越来越大,使用分包加载是开发者必须面对的问题。

正常情况下,小程序首次启动时,会将整个代码包下载下来,所以如果代码包过大,会影响小程序首次启动时间,因此微信官方对小程序代码包做了大小限制。

二、为什么要使用分包?

  1. 小程序要求开发过程中压缩包的体积不能大于2M,否则无法提交发布。

  2. 对小程序进行分包,可以优化小程序首次启动下载时间,因为分包后主包的体积小了,加载更快,提高了用户体验。

  3. 将小程序划分成不同的子包,在构建时打包成不同的分包,用户在使用是按需加载,提升了程序性能。

提示❤️:小程序启动时,默认会下载主包并启动主包内的页面,当用户进入分包内的某个页面时,客户端会把对应的分包下载下来,下载完成后再进行展示。此时终端界面会有等待提示。

说明⚠️:合理使用分包可以较好地优化小程序的加载时间,提升用户体验!

三、分包大小查看

微信开发工具->详情->基本信息面板中即可查看项目及分包信息,如果不采用分包,小程序总大小不能超过2MB,如果采用分包,总大小可以达到20MB,每个包不能超过2MB

在这里插入图片描述

四、如何使用分包?

首先根据项目需求规划目录结构,想需要分包的代码放在独立的目录中,如下图

在这里插入图片描述

跳转到分包的路由 wx.navigateTo({ url: ‘/pagesA/pages/activitys/design/index’ })

注意事项⚠️

  • tabBar 里配置的路径必须放在主包里;
  • 使用 subpackages 进行分包路径声明,subpackages 配置路径外的目录会被打包到主包中;
  • 不同分包之间的资源不能相互引用,但都可引用主包中的资源。

引用原则⚠️

  • packageA 无法 require packageB JS 文件,但可以 require 主包、packageA 内的 JS 文件;使用 分包异步化 时不受此条限制;
  • packageA 无法 import packageB 的 template,但可以 require 主包、packageA 内的 template;
  • packageA 无法使用 packageB 的资源,但可以使用主包、packageA 内的资源。

五、独立分包

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

开发者可以按需将某些具有一定功能独立性的页面配置到独立分包中。当小程序从普通的分包页面启动时,需要首先下载主包;而独立分包不依赖主包即可运行,可以很大程度上提升分包页面的启动速度。

说明⚠️:一个小程序中可以有多个独立分包。

开发者通过在app.jsonsubpackages字段中对应的分包配置项中定义independent字段声明对应分包为独立分包(上图已备注)。

限制⚠️

  • 独立分包中不能依赖主包和其他分包中的内容,包括 js 文件、template、wxss、自定义组件、插件等(使用 分包异步化 时 js 文件、自定义组件、插件不受此条限制);
  • 主包中的 app.wxss 对独立分包无效,应避免在独立分包页面中使用 app.wxss 中的样式;
  • App 只能在主包内定义,独立分包中不能定义 App,会造成无法预期的行为;
  • 独立分包中暂时不支持使用插件。

六、分包预下载

开发者可以通过配置,在进入小程序某个页面时,由框架自动预下载可能需要的分包,提升进入后续分包页面时的启动速度。对于独立分包,也可以预下载主包。

在这里插入图片描述

注意⚠️:分包预下载目前只支持通过配置方式使用,暂不支持通过调用 API 完成。

限制⚠️

  • 同一个分包中的页面享有共同的预下载大小限额2MB,限额会在工具中打包时校验;
  • 如页面 A 和 B 都在同一个分包中,A 中预下载总大小 0.5M 的分包,B中最多只能预下载总大小 1.5M 的分包。

七、项目实战

在做APP、Web开发时,默认为整包,从uni-app 2.7.12+ 开始,也兼容了小程序的分包配置。其目的不用于下载提速,而用于首页是vue时的启动提速。项目中所有的模块都应该是页面放在pages,静态资源放在static、组件放在components里面。在小程序开发过程中,此时pages里面的很多页面是不需要初次进入直接使用的。但是,正常情况下,小程序首次启动时,会将整个代码包下载下来,所以如果代码包过大,会影响小程序首次启动时间,为提升加载性能,所以需要分出去。

pages下面的business文件夹下有很多vue页面,都是页面跳转的,初次进入index首页时并不会用到这些文件,所以把它丢出去。此时在pages同级下创建一个business文件夹。

把除了tarbar需要的那几个界面的其他界面全都放这个文件夹里面来,同时可以创建components文件夹和static文件夹,存放这个分包business文件夹中所用到的components组件和静态资源,但要注意,对于tarbar那几个页面有用到这些组件和static,就需要放到主包里面去。

其实最简单的就是把全部复制出来之后,自己去主包的staticcomponents里面删除tarbar页面不用的那些资源就OK了。

然后就到了配置环节,原本所有的界面都在pages.json文件里面写好了,现在已business为例,原本path应该都是pages/business/… 。现在除了tarbar那个界面,其他的全部复制一份然后删除(指business下的)在pages.jsonpages同级下创建一个。

"subPackages": [{
   "root": "pages/plugins",
   "pages": [
       {
       	"path": "seckill/index/index",
       	"style": {
       		"enablePullDownRefresh": true,
       		"navigationBarTitleText": "限时秒杀"
       	}
       }]
}]

然后把刚复制的那些粘贴到subPackagespages里面,要改名字
举个例子:原本pages/business/caichan,放过来之后变成:caichan,为什么?这是路径,自己想(/business/caichan

照着这个写下去就行,嫌麻烦,自己循环去。到这里pages.json写完了。

manifest.json配置文件分包配置

在"mp-weixin"节点下新增如下分包配置信息:

"optimization" : {
	"subPackages" : true
},//开启分包
"lazyCodeLoading" : "requiredComponents" //按需注入

最后,是否成功分包,可以看得到,编译后弹出的微信开发者工具中有一个代码质量功能。

选择代码质量,扫描一下:

在这里插入图片描述

点击查看就可以看到整个项目的文件了

划重点,右边那个分包,以这个为标准,有就对了。

八、拓展阅读

  • 《跨平台应用开发进阶(六十二):如何把 uni-app APP项目转换成小程序》
  • 《跨平台应用开发进阶(六十三):微信小程序开发》
  • 《跨平台应用开发进阶(六十四):微信小程序开发技术栈原生开发 VS 跨平台开发》
  • 《分包加载》
  • 《uni-app分包加载pages.json文件配置》
  • 《uni-app分包加载.json文件配置》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/548702.html

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

相关文章

HTTP协议报文格式详解和抓包那些事

文章目录 HTTP协议是什么HTTP报文格式抓包工具fiddler HTTP请求请求行HTTP方法URL版本号 请求头HOSTContent-Type&Content-LengthUser-Agent(简称UA)RefererCookie HTTP响应状态行版本号状态码 HTTP协议是什么 HTTP协议全称为超文本传输协议,是一个被广泛使用的…

【dfs之 迭代加深】【dfs层序遍历】【dfs和bfs的缺点结合解决 就是 迭代加深】加成序列

迭代加深 DFS,BFS和迭代加深的联系与区别例题1. 加成序列普通思想:优化方法: DFS,BFS和迭代加深的联系与区别 DFS: DFS算法是沿着搜索树的根节点,一直遍历完该搜索树之后再回溯继续搜索的一种算法。缺点是…

python读取excel数据并用双y轴绘制柱状图和折线图,柱子用渐变颜色填充

python绘图系列文章目录 往期python绘图合集: python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取excel数据并绘制多y轴图像 python绘制柱状图并美化|不同颜色填充柱子 python随机…

体验css:repeat和grid

文章目录 一、repeat1. 语法2. auto-fill和auto-fit3. 专属尺寸① fr② auto③ max-content④ min-content 二、grid1. 设置grid布局2. 设置列宽行高3. 设置间距4. 设置分区5. 设置布局排列顺序6. 设置单元格内容对齐方式7. 设置整个网格对齐方式8. 设置隐式网格大小9. 设置网格…

geoserver图层样式的多种配置方法

前言:用geoserver发布服务的图层一般都配置了样式,简单的或者复杂的;单一的或者渐进式的等。今天我们结合业务场景、依据具体的数据分析给图层配置样式的多种方式。接着前几篇博客用到的数据为例: 一、配置默认样式 点击此篇文章…

Vue中展示中文名称

我今天调用接口时发现列表展示的楼栋一直是数字,并不是它的中文名称;但是点击编辑获取所属楼栋的下拉框中,又为中文名称,当我选中B栋点击修改之后又变成了B栋对应数字;然后我写了一个根据楼栋id获取对应的中文方法&…

栈与队列的对决:用队列实现栈的2种思路

本篇博客会讲解力扣“225. 用队列实现栈”的解题思路,这是题目链接。 先来审题: 以下是输出示例: 以下是提示和进阶: 这道题有2种思路,分别使用2个和1个队列来实现栈。 准备工作 先来实现队列。由于本篇博客的…

一步一步详解LSTM网络【从RNN到LSTM到GRU等,直至attention】

一步一步详解LSTM网络【从RNN到LSTM到GRU等,直至attention】 0、前言1、Recurrent Neural Networks循环神经网络2、The Problem of Long-Term Dependencies长期依赖的问题3、LSTM Networks4、The Core Idea Behind LSTMs5、Step-by-Step LSTM Walk Through6、Varian…

Linux--进程(一篇博客让你理解操作系统的底层)

Linux–进程 本篇博客讲开始进入进程模块,我们先从冯诺依曼的体系结构和操作系统讲起,由浅入深,先梳理一个Linux相关知识体系框架~ 进程目录 Linux--进程一、冯诺依曼体系结构1.1外围设备1.2中央处理器(CPU)1.3存储器(内存)1.3.1什么是内存&a…

【LeetCode20】有效的括号——图解

​ 你好,欢迎来到我的博客!作为一名程序员,我经常刷LeetCode题目来提升自己的编程能力。在我的博客里,我会分享一些我自己做过的题目和解题思路,希望能够帮助到大家。今天,我想和大家分享一道挑战性较高的题…

【Java校招面试】实战面经(三)

目录 前言一、简历中项目的难点及解决方案二、讲讲分布式锁的实现三、AQS(Abstract Queued Synchronizer)的原理四、ConcurrentHashMap的原理五、MySQL InnoDB存储引擎中的MVCC解决了什么问题,MVCC的实现原理六、平时怎么创建线程?为什么用线程池&#x…

Red Hat Enterprise Linux (RHEL) 8.8 正式版发布

红帽企业 Linux 8.8 发布 Red Hat Enterprise Linux (RHEL) 8.8 (x86_64, aarch64) Release 请访问原文链接:https://sysin.org/blog/rhel-8/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 2023年 5月 16日&…

Java学习路线(5)——数组

一、数组的概念 数组是用来存储一系列同类型数据的内存区域。 二、存储数据 1、静态初始化数组 作用: 定义数组时直接赋值。 格式: 【数据类型[] 变量名 new 数据类型[]{值1,值2…,值n}】 示例: double[] height {172.5,170.1,145.1,152.5,…

java常用工具之Scanner类

目录 简介一、扫描控制台输入1.1nextLine1.2nextInt1.3其他方法 二、扫描文件三、查找匹配项四、小结 简介 Java 的 Scanner 类是一个方便在控制台扫描用户输入的工具类,虽然它也可以扫描文件内容,但我们通常更喜欢它扮演前面的角色,因为扫描…

Flink第五章:处理函数

系列文章目录 Flink第一章:环境搭建 Flink第二章:基本操作. Flink第三章:基本操作(二) Flink第四章:水位线和窗口 Flink第五章:处理函数 文章目录 系列文章目录前言一、基本处理函数(ProcessFunction)二、按键分区处理函数(KeyedProcessFunction)1.处理…

【Linux进阶之路】基本权限的理解

文章目录 一.用户1.分类2.su3.su-4.sudo 二.文件1.文件分类2.文件权限3.文件权限的身份4.chmod——改写文件权限第一种方式第二种方式 5.chown——改写文件拥有者身份6.chgrp ——改写文件所属组身份7.umask ——设置权限掩码8.目录权限9.粘滞位——特殊的可执行权限 一.用户 …

关于Markdown文件的处理【笔记】

关于Markdown文件的处理【笔记】 前言推荐关于Markdown文件的处理一、md文件转word文档1 准备2 打开3 转为word文档4 导出结果5 打开 二、word文档转md文件1 准备2 导入3 打开4 显示图片5 打开 三、导入到CSDN中1 选择导入2 查看 四、导入设置1 前言2 导入设置3 修改配置 最后 …

ES6之生成器

文章目录 前言一、生成器是什么?二、生成器总结 前言 生成器 一、生成器是什么? 生成器就是一个特殊的函数,实现异步编程。格式function *名称(){...} (这个*靠近function写,靠近名称写,或者两边空格都不靠近均正确)…

[比赛简介]Parkinson‘s Freezing of Gait Prediction

比赛链接:https://www.kaggle.com/competitions/tlvmc-parkinsons-freezing-gait-prediction 比赛简介 本次比赛的目标是检测步态冻结(FOG),这是一种使人衰弱的症状,困扰着许多帕金森病患者。您将开发一个机器学习…

YOLO V3 SPP ultralytics 第三节:关于yolo 中cfg的网络配置信息和读取cfg配置文件

目录 1. 介绍 2. 关于yolo的cfg网络配置文件 2.1 关于卷积层 2.2 关于池化层 2.3 关于捷径分支shortcut 2.4 关于route 层 2.5 关于上采样层 2.6 关于yolo层 3. 解析cfg 文件 4. 代码 1. 介绍 根据 第二节 的步骤,生成了属于自己的 my_yolov3.cfg 配置…