微信小程序中主包和分包过大,详解分包问题

2023-11-17

哈喽,大家好呀!小韵携原创博文给大家请安啦!

前言:开发微信小程序时,若项目比较大,必定要分包,当项目过于大时,则需要细致、谨慎地对项目进行分包优化和精简,这是一个不可避免地问题,网上的大多数分包优化都是针对于小项目的普通官方分包优化,并未将分包优化讲解更深一步。

介绍:博文介绍了对于较大的项目而言,根据微信开发者工具中提示,从自用组件、官方组件、项目配置等方面提出分包、精简项目的见解。

目录

一.文件结构和工具功能

1.小程序编译的文件结构

2.工具功能使用

A.发行

B.代码依赖分析

二.控制方法

1.自用组件/工具

2.官方组件

A.uni_modules

B.vant

3.全局配置

三.总结


一.文件结构和工具功能

1.小程序编译的文件结构

非常必要推荐了解小程序文件结构,对于稍大的项目,对于包的精简会起到柳暗花明又一村的效果 。众所周知,微信小程序分为“主包”和“分包”模块,每个包不得超过2M最多分10个包共20M。而微信小程序的文件结构,只有主包和分包:

 因此,我们的代码中,除了定义的分包外,所有的其它内容都在主包中

这给我们了启示,在包容量过大情况下,尽量将组件分在各分包内,同时检查除分包外的全局配置。

2.工具功能使用

A.发行

使用HbuilderX运转到微信开发者工具编译成其语言,可经过“运行”和“发行”两种。但“发行”对编译包更加精简,若要“上传”小程序,一定要点“发行”功能。

B.代码依赖分析

代码依赖分析中,详细展示了每个包及文件的大小,可以清晰找出比较大的文件夹和文件,进而优化。

其中还有一个“无依赖代码文件数”功能,在“全部”下面,这个功能比较鸡肋,不能够完全准确地分析出依赖与否,罗列的文件是有可能存在依赖的,只是没有检测出来,不过还是能在一定程度上帮助我们分析出可能无用的文件,自己进行尝试筛选即可(我也要吐槽下,如果这个功能按照文件夹分类不更好吗?)

二.控制方法

1.自用组件/工具

我们会在编写中制作全局自用组件分包自用组件

对于一般的项目来说,比较通用的自用组件,放在全局components下即可,不会给主包占用太多的空间。

对于迫切精简的项目,则考虑把通用组件分别分配在每个调用的分包中以减轻主包压力。基于这种思想,我们可以预估项目的整体大小、考虑组件的全局通用频率进行折衷考虑。

除了组件外,不管哪里的图片,都要放在图片服务器上,仅保留常用的,譬如tabbar图标等几kb的图片。

2.官方组件

我说的官方组件,特指uni_modulesvant组件。这两款都是非常优秀和完整的组件包,里面包含各种组件(包含一些根本不需要的组件)。而它们的内部调用和引入方式却不太相同,因此也造就了不同的分包和精简方法。

A.uni_modules

对于uni_modules组件,内部依赖性很低,样式尚可,正如官网所说,其独立性强,无需配置就可使用。

对于一般的项目,会把整个uni_modules放在外面,在页面中直接使用即可。

对于迫切精简的项目,可以考虑,将外部的uni_modules“uni-icons”,“uni-scss”保留外,全部删除,然后在各分包内直接引入所需组件,在页面使用时需要单独import引入注册为component。“uni-icons”和"uni-scss"保证了各组件的图标和样式不出问题,已是最大程度地保留了uni_modules组件功能性,当然譬如"uni-transition"的缺失,会造成某些组件的“来去”不再平滑。

// uni_modules组件可像普通自定义组件般,放到分包内,vue文件中注册组件使用。
import uniDataPicker from '@/pagesE/components/uni-data-picker/components/uni-data-picker/uni-data-picker.vue'
 components: { uniDataPicker }

B.vant

对于vant组件,在小程序中叫vant-weapp,内部依赖性高,除此之外,还不太兼容、偶出问题(诸如双向绑定不会自动绑定问题最多)。

对于一般的项目来说,将整个vant组件包放在外面,引入方式建议为按需引入,在pages.json中,在使用组件的style-usingComponents中引入,当然如果自己的小程序容量较小并且性能较好,可以放在globalStyle-usingComponents

值得注意的是,vant组件内部依赖性高,不能像uni_modules般分在各个包中单独引用,只能放在工程外部,才能被import找到,即放在分包中,无论以何种方式引入,是不会被找到的。

  // 分包加载vant组件
   {
		"path": "pages/index",
		"style": {
		    "navigationBarTitleText": "首页",
			"usingComponents": {
				"van-field": "/wxcomponents/vant/dist/field/index",
				"van-popup": "/wxcomponents/vant/dist/popup/index",
				"van-button": "/wxcomponents/vant/dist/button/index"
			}
		}
	}             
    // 全局加载vant组件(不推荐)
    "globalStyle": {
		 "navigationBarTextStyle": "black",		
		 "navigationBarBackgroundColor": "#FFFFFF"
		 "usingComponents": {
		     "van-button": "/wxcomponents/vant/dist/button/index",
		 	 "van-cell": "/wxcomponents/vant/dist/cell/index",
		 	 "van-cell-group": "/wxcomponents/vant/dist/cell-group/index",
		  }
	 }

对于迫切精简的项目,目前博主在迁移vant组件上失败,即上面所说的分包引入的方法,因此只能采用删去不需要的组件来精简项目,对于常用的组件进行保留,可以参考“无依赖代码文件”进行删除,但根据经验,“good-action”系列,“minxins”,"overlay"会有某些常用组件内部调用的,不可以删除。以下是我精简后的vant组件,凡事重在尝试,当然自己根据所需精简即可。

       官方组件的完整包的大小约在300kb左右,对本就不太富裕空间其实就是一种累赘了。uni_modules和vant的功能范围都大差不差,uni_modules更符合微信官方的风格,大部分情况下,都可以在其中找到我们所需要的,找不到的可以去插件市场,我在微信小程序运行、编译、发布等开发概括_韵泽月光的博客-CSDN博客中也泛讲了相关开发准备。vant组件在小程序上可就不如前者和PC端了(小程序vant是用微信语言写的),会和PC端的使用有些不一样、不生效的,但是其中的某些组件确实可以弥补uni_modules中的不符合html和js的交互功能的不足。所以其中取舍,我也差不多和大家分享了经验了。

3.全局配置

全局配置是很容易忽略的,为追求方便,项目开发者会直接在main.js或者App.vue中引入全局js文件或者css文件。

@font-face

有些项目在初次建立时,就引入的全局的css文件,比如uni.scss,或者自定义的字体css文件。而字体引入都是通过base64编码引入,编码本身就已经很大了,或已经超过正常需求的代码大小了,而且在每个编译后的wxss中都存在,代码大小直接翻倍是没有问题了,我已经吃过两次亏了。

这可能需要自己主动去微信开发者工具观察每个文件的大小了,若出现了批量的异常大小的相同后缀文件,那大概就是被全局配置了,进入文件内容可自行查看和解决。

三.总结

博文主要讲解了对于实际大包且可能出现超包的项目的精简项目方法,提供了分包、精简项目的出发角度和考虑方向,即根据微信开发者工具中提示,从自用组件官方组件项目配置等方面提出了见解。我在所参与的两个项目中,都出现了爆炸容量!!!,最后分去主包0.02Mb的内容都花费不小时间,由于分包经验少,所以可能会出现绝对的错误和相对的经验错误,请大家在评论区指正。

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

微信小程序中主包和分包过大,详解分包问题 的相关文章

  • STM32学习(四)GPIO输入检测

    通过检测GPIO输入 让LED灯实现亮灭翻转的效果 跟 三 中类似 首先创建一个bsp key c和bsp key h文件 将与案件有关的宏定义和相应的函数都放在里面 1 首先在User文件夹下添加bsp key c文件 并通过bsp ke
  • ELK学习笔记之logstash安装logstash-filter-multiline(在线离线安装)

    0x00 概述 ELK logstash在搬运日志的时候会出现多行日志 普通的搬运会造成保存到ES中单条单条 很丑 而且不方便读取 logstash filter multiline可以解决该问题 github地址 https github
  • 1037. 在霍格沃茨找零钱(20)

    题目链接 http www patest cn contests pat b practise 1037 1037 在霍格沃茨找零钱 20 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Stand
  • 【源码】10 个 Python 爬虫入门实例!

    今天带伙伴们学习python爬虫 准备了几个简单的入门实例 分享给大家 涉及主要知识点 web是如何交互的 requests库的get post函数的应用 response对象的相关函数 属性 python文件的打开 保存 代码中给出了注释
  • QXlsx编译和使用

    一 概要 QtXlsx是可以读取和写入Excel文件的库 它不需要Microsoft Excel 并且可以在Qt5支持的任何平台下使用 可以用于 从头开始生成新的 xlsx文件 从现有的 xlsx文件中提取数据 编辑现有的 xlsx文件 二
  • Altium Designer19如何查看PCB中有多少焊盘和元件

    在旧版的Altium Designer中 可以通过 Reports gt Board Information 可以看到PCB的相关信息 里面就有焊盘数量 元件数量等等相关信息 但是AD19中 Reports 中没有 Board Inform
  • 机器人教育对思维能力和创新能力有益

    发展人工智能机器人教育 从孩子的思维和技术能力创新上抓起不仅重要而且必须 格物斯坦小坦克认为机器人教育更多的是采用引导的方式 激发孩子们的想法 重在培养孩子的的思维 心理素质以及动手能力 在制作机器人的过程中 孩子需要动手实践锻炼思维逻辑能

随机推荐

  • 2020年06月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

    一 单选题 共25题 每题2分 共50分 第1题 以下哪种输入结果不可能得到以下反馈 重要的事情说三遍 安全第一 安全第一 安全第一 A print 重要事情说三遍 安全第一 3 B print 重要事情说三遍 安全第一 安全第一 2 C
  • Python基础知识总结

    Python基础知识总结 字符串 字符串操作 字符大小写转换 长度填充与删除 string模块函数 进制转换 列表 列表之星操作 字典 字典操作 字符串 字符串操作 序号 分类 函数 方法 描述
  • 编译Linux内核

    一 首先下载好内核源代码 首先在命令行窗口中执行下面这条命令 apt cache search linux source 执行用这条命令系统会提示你安装适合你内核版本的内核源码 然后选择其中一种内核版本 到www kernel org内核官
  • Jenkins持续集成项目实践 —— 基于Python Selenium自动化测试(二)

    上一篇讲了如何搭建jenkins 这篇主要讲 怎么将自动化代码与jenkins衔接起来 jenkins上运行的两种方式 第一种 在jenkins上面运行本地代码 操作如下 新建项目 项目名称根据自己项目情况填写并选择自由模式 进行配置根据如
  • R语言入门教程知识 第二章 赋值代码与命名规则

    快捷键 新建脚本 Ctrl shift N 清理控制台快捷键 Ctrl L 赋值快捷键ALT 赋值法 1 符号方式赋值 对象名 lt 对象值 2 函数方式赋值 assign 对象 对象值 三大基础函数 numeric 数值型向量 logic
  • 上网原理大透析(MAC,IP,掩码,DNS)

    一 概述 1 1 五层模型 互联网的实现 分成好几层 每一层都有自己的功能 就像建筑物一样 每一层都靠下一层支持 用户接触到的 只是最上面的一层 根本没有感觉到下面的层 要理解互联网 必须从最下层开始 自下而上理解每一层的功能 如何分层有不
  • 内联函数的使用及注意点

    内联函数并不总是内联 Inline function是在C 中引入的一种机制 它可以拓展函数代码 避免调用函数的额外开销 在Linux环境下 gcc编译选项必须加上优化选项才能使inline有效 inline与static的关系 在这儿有一
  • Kafka之基础笔记

    1 kafka offset 存储 1 1 去zookeeper依赖 比较广为人知的Kafka offset存储方式为zookeeper 在0 8版本时 默认依然是zk 但是此时其实已经出现另外一种offset存储方式了 Kafka以 co
  • 如何在ios中集成微信登录功能

    在ios中集成微信的登录功能有两种方法 1 用微信原生的api来做 这样做的好处就是轻量级 程序负重小 在Build Settings 中这样设置 然后设置 友盟的设置同上 但是要注意 加入你需要的所有框架到应用程序中
  • VUE3父子组件传值defineProps() 和 defineEmits()

    defineProps 和 defineEmits 都是只能在
  • 二十三种设计模式第十九篇--命令模式

    命令模式是一种行为设计模式 它将请求封装成一个独立的对象 从而允许您以参数化的方式将客户端代码与具体实现解耦 在命令模式中 命令对象充当调用者和接收者之间的中介 这使您能够根据需要将请求排队 记录请求日志 撤销操作等 命令模式的核心组成部分
  • yaml数组解析_【社区精选】一文看懂 YAML

    本文原作者为陈皮皮 2020年6月11日发布于 微信小游戏开放社区 原文 一文看懂 YAML 前言 YAML 并不是一种新奇的语言 YAML 首次发表于 2001 年 距离现在已经过去差不多 20 个年头 YAML 虽然不如 JSON XM
  • 16/32/64平台上不同内置数据类型所占的字节数大小

    https blog csdn net qq 32535249 article details 88077019 utm medium distribute pc relevant none task blog baidujs title
  • 银行对公账户编码规则

    银行对公账户编码规则 1 工商银行 2 农业银行 3 中国银行 4 建设银行 5 邮储银行 更多 1 工商银行 中国工商银行对公账户共19位 其中1 4位为地区代码 详见代码表 5 8位为网点代码 9 10位为应用号 11 17位为序号 1
  • 计算机网络复习7---差错检验CRC循环冗余检验

    这部分在书中P74页 具体步骤已经写的非常清楚了 这里不做详细介绍 这里着重说一点 是我在刚才复习时才发现一直弄错的地方 希望大家不要出错 在模2除法时 被除数应该是 待传数据 n个0 被除数不是 代传数据 这个很重要 n个0怎么确定呢 书
  • easyexcel 学习

    EasyExcel EasyExcel是一个基于Java的简单 省内存的读写Excel的开源项目 在尽可能节约内存的情况下支持读写百M的Excel 语雀 写excel 引言 首先简单讲解一下EasyExcel的写语法 方便理解后续的代码 最
  • 什么是深度学习,如何进行深度学习?

    深度学习的必要性 改革开放40年 基础教育研究与实践的最大成就之一 就是树立了 学生是教育主体 的观念 但是 在课堂教学中 学生并未真正成为主体 大多数课堂教学也没有发生根本变化 为什么 因为大多数教学改革尚未抓住教学的根本 对课堂教学的研
  • java开发sublime插件_开发者最常用的8款Sublime text 3插件

    5 SublimeCodeIntel Sublime Code Intel 作为一个代码提示和补全插件 支持Javascript Mason XBL XUL RHTML SCSS python HTML Ruby Python3 XML S
  • 【常见的编解码场景】

    常见的编解码场景 一 编码与解码 1 1 字符编解码 字符集和编码 编解码过程分析 编解码举例 1 2 http url编码 1 3 http body编码 1 4 压缩编码 1 5 对象编码 netty框架中的编码解码 dubbo框架的编
  • 微信小程序中主包和分包过大,详解分包问题

    哈喽 大家好呀 小韵携原创博文给大家请安啦 前言 开发微信小程序时 若项目比较大 必定要分包 当项目过于大时 则需要细致 谨慎地对项目进行分包优化和精简 这是一个不可避免地问题 网上的大多数分包优化都是针对于小项目的普通官方分包优化 并未将