uniapp: 微信小程序包体积超过2M的优化方法

一、问题描述

在使用uniapp进行微信小程序开发时,经常会遇到包体积超过2M而无法上传:

在这里插入图片描述

二、解决方案

目前关于微信小程序分包大小有以下限制:

整个小程序所有分包大小不超过 30M(服务商代开发的小程序不超过 20M)
单个分包/主包大小不能超过 2M

网络上关于优化的方式大体如下:

1.图片优化:

(1)静态图片尽量使用线上地址,不要放到项目中:
我们可以将static的图片上传图片服务器上去,小程序使用链接的形式来下载使用图片。
(2)除了tabBar的iconPath,因为那个只能使用本地资源,相对来说这个不大。
(3) 图片压缩:可以使用在线压缩工具https://tinypng.com/

2.分包加载:

除了TabBar的页面,其他的页面进行分包处理,保证主包的大小。具体分包方法请参考官方文档:使用分包

3.依赖分离:

使用分包之后会发现遇到了一个奇怪的问题,子包的组件和js文件会被打包到主包的vendor.js文件中,这就导致了vendor.js过大。

检查manifest.json,在这个文件下的源码视图中,在mp-weixin节点有个optimization,optimization下的subpackages节点时用来控制微信分包的,需要将此节点设为true:

"optimization" : {
    "subpackages" : true
}

在这里插入图片描述

配置好后重新运行,会发现分包的js文件将不会再打包到主包的vendor.js中了。

4.启用代码压缩:

在Hbuilder中启用运行时压缩代码:

在这里插入图片描述

5.发行小程序:

在这里插入图片描述

以上便是网络上常见的优化方式,如果上述优化仍无法满足要求,那么可以考虑:

6.分包异步化:

这部分涉及跨分包自定义组件引用跨分包 JS 代码引用,本文只对跨分包自定义组件引用的使用及注意事项进行说明,跨分包 JS 代码引用的使用可以参考文档。

本文基于新旧项目融合改造遇到的包过大问题而尝试采用跨分包自定义组件引用的方式,新旧两个项目分别有一个页面是TabBar的页面,而两个页面都各自引用了比较大的components内的组件,从而导致主包太大。下面将其中一个TabBar页面所使用的组件Indicator分离到分包subPages中:

首先对Indicator组件做一个说明:Indicator组件使用了qiun-data-charts组件,而qiun-data-charts引入了u-chartsu-charts组件比较大,并且qiun-data-charts组件也在分包subPages中有使用,因此将TabBar页面的Indicator分离到分包subPages中,以彻底将qiun-data-charts组件(包括u-chartsu-charts组件)分离主包。

代码及配置示例如下:

// 主包src/pages/home/index.vue
<template>
	<Indicator />
</template>

自定义组件设置占位组件:

// pages.json
{
	"pages": [
			{
			"path": "pages/home/index",
			"style": {
				"navigationBarTitleText": "首页",
				"usingComponents": {
				    "indicator": "../../subPages/components/indicator/index"
				  },
				"componentPlaceholder": {
					"indicator": "view"
				}
			}
		}
	]
}

至此,已完成官方文档关于分包异步化的设置,但就此运行可能会报异步分包的组件路径找不到:

在这里插入图片描述
查看开发者工具中的代码目录:

在这里插入图片描述

也确实找不到异步分包的Indicator组件目录。

原因应该是hbuilderx对于分包内未被使用的components不会进行打包。因此,可以新建一个空页面asyncSubPage,在该页面引入Indicator组件:

在这里插入图片描述

// src\subPages\asyncSubPage\index.vue

<template>
	<div></div>
</template>

<script>
	import Indicator from '../components/indicator/index.vue'
	export default {
		components: {
			Indicator
		}
	}
</script>

<style>
</style>

在pages.json中注册页面:

"subPackages": [
	{
		"root": "subPages",
		"pages": [
			{
				"path": "asyncSubPage/index"
			},
			...
		]
	},
	...
]

至此,位于主包内的一个大组件就分离到分包中,从而异步加载使用。最后再看一下微信开发者工具中subPages的components中已经出现indicator组件目录:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Node.Js+Knex+MySQL增删改查的简单示例(Typescript)

数据库: CREATE DATABASE MyDB; CREATE TABLE t_users (user_id int(11) NOT NULL,user_name varchar(10) NOT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8; 项目结构: package.json如下&#xff0c;拷贝并替换你们本地的package.json后运行 npm install 命令安装所需要的依赖。…

fastadmin多个表crud连表操作步骤

1、crud命令 php think crud -t xq_user_credential -u 1 -c credential -i voucher_type,nickname,user_id,voucher_url,status,time --forcetrue2、修改控制器controller文件 <?phpnamespace app\admin\controller;use app\common\controller\Backend;/*** 凭证信息…

【论文阅读】利用SEM二维图像表征黏土矿物三维结构

导言 在油气储层研究中&#xff0c;黏土矿物对流体流动的影响需要在微观尺度上理解&#xff0c;但传统的二维SEM图像难以完整地表征三维孔隙结构。常规的三维成像技术如FIB-SEM&#xff08;聚焦离子束扫描电子显微镜&#xff09;虽然可以获取高精度的3D图像&#xff0c;但成本…

JavaScript 中的 undefined 、null 与 NaN :概念解析与对比

文章目录 &#x1f4af;前言&#x1f4af;undefined1. 什么是 undefined2. undefined 的使用场景3. undefined 的特性 &#x1f4af;null1. 什么是 null2. null 的使用场景3. null 的特性 &#x1f4af;NaN1. 什么是 NaN2. NaN 的使用场景3. NaN 的特性 &#x1f4af;三者的区别…

C++编程技巧与规范-类和对象

类和对象 1. 静态对象的探讨与全局对象的构造顺序 静态对象的探讨 类中的静态成员变量(类类型静态成员) 类中静态变量的声明与定义&#xff08;类中声明类外定义&#xff09; #include<iostream> using namespace std;namespace _nmspl {class A{public:A():m_i(5){…

python遇到问题

1&#xff0c;BeautifulSoup lxml 解析器安装 问 1&#xff0c;BeautifulSoup lxml 解析器安装2&#xff0c;BeautifulSoup 如何引入第三方库 BeautifulSoup lxml&#xff0c;默认是导入的是python内置的解析器答1 1. 安装 Python 和 pip 确保你已经安装了 Python 和 pip。你…

async 和 await的使用

一、需求 点击按钮处理重复提交&#xff0c;想要通过disabled的方式实现。 但是点击按钮调用的方法里有ajax、跳转、弹窗等一系列逻辑操作&#xff0c;需要等方法里流程都走完&#xff0c;再把disabled设为false&#xff0c;这样下次点击按钮时就可以继续走方法里的ajax等操作…

MacOS下,如何在Safari浏览器中打开或关闭页面中的图片文字翻译功能

MacOS下&#xff0c;如何在Safari浏览器中打开或关闭页面中的图片文字翻译功能 在Mac上的Safari浏览器中&#xff0c;可以通过实况文本功能来实现图片中的文本翻译。关闭步骤具体步骤如下&#xff1a; 在浏览器地址栏&#xff0c;鼠标右击翻译按钮&#xff0c;然后点击“首选…

31.2 DOD压缩和相关的prometheus源码解读

本节重点介绍 : 时序数据时间的特点DOD压缩原理讲解dod压缩过程讲解dod压缩 prometheus源码解读 时序数据时间的特点 持续采集采集间隔固定&#xff0c;如prometheus配置job中的scrape_interval参数每隔15秒采集一次 - job_name: node_exporterhonor_timestamps: truescrape…

推荐一款好用的ios传输设备管理工具:AnyTrans for iOS

AnyTrans for iOS是一款好用的ios传输设备管理工具&#xff0c;可以方便用户对iphone、ipad、ipod中的文件进行管理操作&#xff0c;可以方便用户在电脑上进行各类文件的管理操作&#xff0c;支持联系人、视频、音频、短信、图片等文件的导入&#xff0c;软件支持双向传输和浏览…

快速利用c语言实现线性表(lineList)

线性表是数据结构中最基本和简单的一个&#xff0c;它是n的相同类型数据的有序序列&#xff0c;我们也可以用c语言中的数组来理解线性表。 一、线性表声明 我们定义一个线性表的结构体&#xff0c;内部有三个元素&#xff1a;其中elem是一个指针&#xff0c;指向线性表的头&am…

计算机毕业设计Python+CNN卷积神经网络股票预测系统 股票推荐系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

QT QLineEdit失去焦点事件问题与解决

本文介绍如何获得QLineEdit的失去焦点事件和获得焦点的输入框也会触发失去焦点事件的问题&#xff01; 目录 一、QLineEdit获得失去焦点事件 1.自定义类继承自QLineEdit 2.重写 focusOutEvent 3.使用 二、失去焦点事件问题 1.问题描述 2.问题解决 三、源码分享 lineed…

vscode执行npm install报错

npm install一直提示报错 以管理员身份运行vscode&#xff0c;如果每次觉得很麻烦可以做如下修改&#xff1a;

【算法】树状数组

前言 众所周知&#xff0c;通过前缀和&#xff0c;我们可以很快的在一个很大的数组中求出区间和&#xff0c;但是如果想要去修改数组中的一个数的值&#xff0c;前缀和就无法实现。所以来学习一个新的数据结构&#xff1a;树状数组 &#xff08;文章中关于树状数组的截图来自于…

Java项目实战II基于微信小程序的私家车位共享系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在城市化进…

ZeroSSL HTTPS SSL证书ACMESSL申请3个月证书

目录 一、引言 二、准备工作 三、申请 SSL 证书 四、证书选型 五、ssl重要性 一、引言 目前免费 Lets Encrypt、ZeroSSL、BuyPass、Google Public CA SSL 证书&#xff0c;一般免费3-6个月。从申请难易程度分析&#xff0c;zerossl申请相对快速和简单&#xff0c;亲测速度非…

pipx安装提示找不到包

执行&#xff1a; pipx install --include-deps --force "ansible6.*"WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by NewConnectionError(<pip._vendor.urllib3.connection.HTTPSConnection …

react + ts定义接口类型写法

接口&#xff08;未进行ts定义&#xff09; export async function UserList(params: {// keyword?: string;current?: number;pageSize?: number;},// options?: { [key: string]: any }, ) {return request<API1.UserList>(http://geek.itheima.net/v1_0/mp/artic…

Golang超详细入门教程

Golang超详细入门教程 部分图片可能加载不出来&#xff0c;所以这里我上传到了自己的个人网站上也可以查看&#xff1a;http://dahua.bloggo.chat/testimonials/490.html 一、数据类型转换 C语言中数据可以隐式转换或显示转换, 但是Go语言中数据只能显示转换格式: 数据类型(…