为什么要使用分包加载和分包预加载?
使用分包加载和分包预加载可以提升小程序的性能和用户体验,特别是在小程序具有大量功能模块或需要加载大量资源时,更能发挥优势。
分包加载和分包预加载的优缺点
分包加载优点:
减小了小程序的初始包大小,加快首次加载速度。将小程序的功能模块拆分成多个分包,按需加载模块,减少了不必要的资源占用。只有当用户访问到某个分包的页面时,才会加载相应的分包。
分包加载缺点:
增加了维护成本和网络请求次数。由于分包加载需要动态加载资源,可能会涉及到多次网络请求,增加了网络开销。
分包预加载优点:
在页面空闲时提前将可能会访问的资源下载下来,减少了用户首次打开分包页面时的加载时间,提高了用户体验。
分包预加载缺点:
预加载有可能会将不会访问的资源也提前下载下来,占用用户的网络带宽和手机存储空间。
预加载的分包资源可能会过期,导致用户加载过时的内容。
小程序分包原理
微信小程序–分包
1、什么是分包
分包指的是把一个完整的小程序项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。
分包原理:在小程序启动时,默认会下载主包并启动主包内页面,当用户进入分包内某个页面时,客户端会把对应分包下载下来,下载完成后再进行展示。
2、分包后的项目构成
分包后小程序由一个主包与多个分包组成,
主包:一般只包含项目的启动页面或 TabBar 页面、以及所有分包都需要用到的一些公共资源
分包:只包含和当前分包有关的页面和私有资源。
二、为什么需要进行分包
微信小程序限制了代码包不能超过 2MB,限制大小是对小程序启动速度的考虑,但是2MB 大小严重限制了小程序功能的扩展,业务需求可能需要更大的体积,综合考虑微信推出了“分包加载方案”
目前小程序分包大小有以下限制:
整个小程序所有分包大小不超过 20M(微信小程序版本不同,大小不同)
单个分包/主包大小不能超过 2M
对小程序进行分包,可以优化小程序首次启动的下载时间,以及在多团队共同开发时可以更好的解耦协作
三、如何进行分包操作
1、配置
需要在主包的app.json中进行配置(微信小程序官方文档的示例如下)
分包后的文件列表信息如下:
app.json中文件的配置
{
"pages":[
"pages/logs/logs",
"pages/index/index"
],
"subPackages": [
{
"root": "packageA",
"name": "pack1",
"pages": [
"pages/cat/cat",
"pages/dog/dog"
]
},{
"root": "packageB",
"name": "pack2",
"pages": [
"pages/banana/banana",
"pages/apple/apple"
],
"independent": true
}
],
注释 属性
2、打包原则
声明 subpackages 后,将按 subpackages 配置路径进行打包,subpackages 配置路径外的目录将被打包到主包中
主包也可以有自己的 pages,即最外层的 pages 字段。
subpackage 的根目录不能是另外一个 subpackage 内的子目录
tabBar 页面必须在主包内
3、引用原则
packageA 无法 require packageB JS 文件,但可以 require 主包、packageA 内的 JS 文件;使用分包异步化时不受此条限制
packageA 无法 import packageB 的 template,但可以 require 主包、packageA 内的 template
packageA 无法使用 packageB 的资源,但可以使用主包、packageA 内的资源
4、低版本兼容
由微信后台编译来处理旧版本客户端的兼容,后台会编译两份代码包,一份是分包后代码,另外一份是整包的兼容代码。 新客户端用分包,老客户端还是用的整包,完整包会把各个 subpackage 里面的路径放到 pages 中。
5、分包预加载
分包预下载目前只支持通过配置方式使用,暂不支持通过调用 API 完成。
6、配置方法
预下载分包行为在进入某个页面时触发,通过在 app.json 增加 preloadRule 配置来控制。
{
"pages":[
"pages/logs/logs",
"pages/index/index"
],
"subPackages": [
{
"root": "packageA",
"name": "pack1",
"pages": [
"pages/cat/cat",
"pages/dog/dog"
]
},{
"root": "packageB",
"name": "pack2",
"pages": [
"pages/banana/banana",
"pages/apple/apple"
],
"independent": true
}
],
"preloadRule": {
"pages/index": {
"network": "all",
"packages": ["pack1"]
//"packages": ["packageA"] 也可以写这个
},
//B 是独立分包 需要单独作为根节点
"packageB/index":{
"packages":["_APP_"]
}
}
preloadRule
中,key
是页面路径,value
是进入此页面的预下载配置,每个配置有以下几项:
7、限制
同一个分包中的页面享有共同的预下载大小限额 2M,限额会在工具中打包时校验。
如,页面 A 和 B 都在同一个分包中,A 中预下载总大小 0.5M 的分包,B中最多只能预下载总大小 1.5M 的分包。
8、分包异步化
在小程序中,不同的分包对应不同的下载单元;因此,除了非独立分包可以依赖主包外,分包之间不能互相使用自定义组件或进行 require。「分包异步化」特性将允许通过一些配置和新的接口,使部分跨分包的内容可以等待下载后异步使用,从而一定程度上解决这个限制。
9、兼容性
该特性需要基础库版本 2.11.2 或以上,使用该特性的小程序在 2.11.2 以下的基础库上可能无法工作,如果发布正式版本,可以考虑将最低基础库版本设置为 2.11.2 或以上。
版权声明:【小程序分包加载缺点是什么,小程序分包原理】版权归原作者所有,本文由作者:【王鹏(python工程师)】用户自发贡献上传,该文观点仅代表作者本人,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任,如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至举报,一经查实,本站将立刻删除,如若转载,请注明出处:https://www.intostarry.com/jrzy/802.html