小程序:如何合理规划分包使主包不超过2M

背景

做过小程序项目的同学应该都有这样的经历,项目做着做着,突然发现代码包的大小超过了 2M,小程序无法提审,然后痛苦的删文件改代码来减少包大小。

虽然我们也知道小程序给我们提供了分包的功能可以减少主包的大小,但是我们在一开始做项目的时候可能不会去规划然后一股脑放在主包里,当超过后才考虑哪些要放在分包里,这时候再去重构就会比较复杂了,今天我们来讨论一下如何合理的规划分包来避免代码包体积的问题。

思路

我们知道,小程序对代码的包大小有一些规则:

  • 整个小程序所有分包大小不超过 20M。
  • 单个分包/主包大小不能超过 2M。

那么首先,我们要挑出项目中比较大的文件,以我们项目为例,主要有两个:
1、vant 组件库(300K左右)
2、echarts 图表库(1M左右)

这样可以预见的是目前已经有1.3M的库了,加上一些插件也会打包进主包里,所以我们不能把这些库放到主包里,那么我们要讨论的问题有两个:
1、这些库放在哪里
2、确定放在哪之后,主包和其他分包如何依赖这些库

讨论1:这些库放在哪里

  • 方式一:放在业务的分包
  • 方式二:放在独立的分包

方式一

比如,当某个业务分包要使用 vant 库,就把 vant 库直接放在这个分包里。

  • 优点:
    • 分包独立,不依赖外部
  • 缺点:
    • 1、组件库冗余,可能会造成每个分包里都有一个组件库。
    • 2、需要更新时,各个分包使用的组件库版本可能会不统一(虽然也无伤大雅)
    • 3、主包无法依赖

总结:
对于缺点1很严重,整个小程序所有分包大小不超过 20M,用这种方式会极速膨胀,所以这种方式不适合
2,其实影响不大
3,可以按照方式二建立一个组件库分包,只供主包使用。

方式二

我们新建一个分包,里面只放 vant 库。
当某个业务分包要使用 vant 库,则依赖这个独立的分包(可以使用分包异步化)。

  • 优点:
    • 统一管理
    • 主包和分包都可以依赖
  • 缺点:
    • 1、使用分包异步化可能会有小的延迟。
    • 2、当库需要更新的时候,影响面比较大。

总结:
对于缺点1,无解,但是影响也不大
对于缺点2,无解,影响可大可小吧,现在的也基本上是这么干的

总结

方式一问题太大,不能用
方式二看起来会更好一些,虽然也有一些可能会遇到的问题,但是都不算很严重。

讨论2:主包和其他业务分包如何更优雅的依赖分包中的库

使用alias进行依赖,一些小程序第三方框架都会支持,或者自己用 webpack 配置 alias,使用如下:
json文件

{"usingComponents": {"van-button": "~@/subpackage-components/vant/button/index"},"componentPlaceholder": {"van-button": "view"}
}

js文件

const echarts = await import('@/subpackage-echarts/ec-canvas/echarts.js')

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

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

相关文章

202305-2-矩阵运算

一、题目分析 此题本质是计算 ( W ⋅ ( Q K T ) ) V (W(QK^T))V (W⋅(QKT))V的值。 注意任务要求&#xff1a; 70% 的测试数据满足&#xff1a;n<100且d<10 。输入矩阵、向量中的元素均为整数&#xff0c;且绝对值均不超过30 。 全部的测试数据满足&#xff1a;n<1…

学习不同概率分布(二项分布、泊松分布等)概念及基础语法

概率分布是描述随机变量取值的概率情况的函数。常见的概率分布包括二项分布、泊松分布等。 二项分布&#xff08;Binomial Distribution&#xff09;&#xff1a;描述了一次试验中成功事件发生的次数的概率分布。它的基础语法如下&#xff1a; 概率质量函数&#xff1a;pmf(k, …

【微信小程序】实现投票功能(附源码)

一、Vant Weapp介绍 Vant Weapp 是一个基于微信小程序的组件库&#xff0c;它提供了丰富的 UI 组件和交互功能&#xff0c;能够帮助开发者快速构建出现代化的小程序应用。Vant Weapp 的设计理念注重简洁、易用和高效&#xff0c;同时提供灵活的定制化选项&#xff0c;以满足开发…

知识付费系统的移动应用开发:跨平台和原生应用的比较

移动应用在知识付费系统中发挥着重要作用&#xff0c;为用户提供了便捷的访问方式。在开发知识付费系统的移动应用时&#xff0c;开发团队通常需要考虑使用跨平台开发工具或原生开发。本文将比较这两种方法&#xff0c;讨论它们的优点和缺点&#xff0c;并提供示例代码来说明它…

用Python做数据分析之数据筛选及分类汇总

1、按条件筛选&#xff08;与&#xff0c;或&#xff0c;非&#xff09; 为数据筛选&#xff0c;使用与&#xff0c;或&#xff0c;非三个条件配合大于&#xff0c;小于和等于对数据进行筛选&#xff0c;并进行计数和求和。与 excel 中的筛选功能和 countifs 和 sumifs 功能相似…

面向对象设计原则之接口隔离原则

目录 定义接口隔离原则与单一职责原则示例 定义 接口隔离原则&#xff0c;全称为 Interface Segregation Principle&#xff0c;缩写ISP。 原始定义&#xff1a;Clients should not be forced to depend upon interfaces that they don’t use。 翻译&#xff1a; 不应该强行…

k8s 部署nginx前端

1.构建docker镜像&#xff0c;k8s拉取镜像运行 ​​​​​​​docker自己安装 [rootmaster1 ~]# docker pull nginx:1.24.0 [rootmaster1 ~]# mkdir k8s-nginx [rootmaster1 ~]# cd k8s-nginx [rootmaster1 k8s-nginx]# vim nginx.conf server_tokens off;server {listen …

MVC架构_Qt自己的MV架构

文章目录 前言模型/视图编程1.先写模型2. 视图3. 委托 例子&#xff08;Qt代码&#xff09;例1 查询本机文件系统例2 标准模型项操作例3 自定义模型示例:军事武器模型例4 只读模型操作示例例5 选择模型操作例6 自 定 义委 托(在testSelectionModel上修改) 前言 在Qt中&#xf…

ROS自学笔记十五:URDF工具

要使用工具之前&#xff0c;首先需要安装&#xff0c;安装命令: sudo apt install liburdfdom-tools 1.check_urdf 语法检查 在ROS中&#xff0c;你可以使用.check_urdf命令行工具来对URDF&#xff08;Unified Robot Description Format&#xff09;文件进行语法检查和验证。…

Pytorch实现深度学习常见问题

RuntimeError: stack expects each tensor to be equal size, but got [3, 300, 300] at entry 0 and [3, 301, 301] at entry 24 这里的问题出现的原因肯定是在数据预处理处&#xff0c;如下图&#xff0c;当数据使用不同的transforms处理方式时&#xff0c;会导致数据的尺寸大…

使用docker部署flask接口服务 一

文章目录 一&#xff1a;说明二&#xff1a;dockerfile 参数说明1. 一般常用的 参数&#xff0c;以及它的含义2. 我自己的 dockerfile 三&#xff1a;示例操作1. Gunicorn Gevent启动服务的好处2. 用Gunicorn Gevent的好处&#xff1a;3. Gunicorn Gevent的 使用示例4. 创建…

ChatGPT 与 Python Echarts 完成热力图实例

热力图是一种数据可视化方式&#xff0c;它通过颜色的变化来表示数据的差异和分布。以下是使用热力图的一些作用和好处&#xff1a; 数据可视化&#xff1a;热力图可以将复杂的数据集转化为更直观、更易理解的形式。这对于很多人来说&#xff0c;尤其是那些没有深入统计学或数…

Golang Struct 继承的深入讨论和细节

1&#xff09;结构体可以使用嵌套匿名结构体所有的字段和方法&#xff0c;即&#xff1a;首字母大写或者小写的字段、方法&#xff0c;都可以使用。 package mainimport "fmt"type A struct {Name stringage int }func (a *A) SayName() {fmt.Println("A say …

【软件测试】了解JUnit单元测试框架常用注解

目录 1、认识JUnit 2、Junit中常见的注解 1、Test 2、Disabled 3、BeforeAll和AfterAll 4、BeforeEach和AfterEach 5、 ParameterizedTest&#xff1a;参数化 6、order 3、断言 1、断言相等【Assertions.assertEquals(预期&#xff0c;比较值)】&#xff1b;相等测试通…

使用docker部署lnmp多站点

1. 创建一个 Docker 网络 以便容器可以在同一网络上进行通信 docker network create lnmpnetwork2. 运行 MySQL 容器&#xff1a; 运行 MySQL 容器并将其连接到创建的网络。确保将 MySQL 的端口映射到宿主机上&#xff0c;以便您可以从宿主机访问数据库。 将mysql的配置和数…

Spring-手写模拟Spring底层原理

概述 模拟大致的底层原理&#xff0c;为学习Spring源码做铺垫。 实现的功能&#xff1a;扫描路径、依赖注入、aware回调、初始化前、初始化、初始化后、切面 未实现的功能&#xff1a;构造器推断、循环依赖 重点&#xff1a;BeanDefinition、BeanPostProcessor 学习Spring…

SpringBoot日志+SpringMVC+UUID重命名文件+Idea热部署

目录 【SpringBoot日志】 什么是日志&#xff0c;日志的作用 关于日志的基本信息&#xff0c;又有哪些呢&#xff1f; 关于日志的级别 Springboot内置SLF4J【门面模式】 和 logback【日志框架】 在配置文件中可以设置日志级别【以.yml为例】 SpringBoot 持久化的保存日…

【ARM Coresight 系列文章19.2 -- Cortex-A720 AMU 详细介绍】

文章目录 1.1 PMU 与 AMU1.2 AMU 介绍1.2.1 AMU 编程模型1.2.2 AMU 的访问1.2.3 Activity monitors counters1.1 PMU 与 AMU A-Prolifile 构架中的 Performance Monitoring Unit(PMU)和Activity Monitoring Unit(AMU)都具有性能计数器。AMU和PMU可以计数的事件类似,那么AMU…

紫光集团、展讯通信、锐迪科(RDA)、紫光展锐以及翱捷科技(ASR)关系梳理

紫光集团、展讯通信、锐迪科(RDA)、紫光展锐以及翱捷科技(ASR)关系梳理 参考链接: 一文梳理国产芯片巨头:紫光集团https://zhuanlan.zhihu.com/p/578232102 紫光展锐发展史,曾经的热血海归们如今都去哪了? 然而早在2013年和2014年,展讯和锐迪科就分别被紫光收购。相隔一…

客户端负载均衡策略:loadBalancer,ribbon

客户端负载均衡是指在分布式系统中&#xff0c;客户端通过某种策略将请求分发到多个服务提供者实例上&#xff0c;以达到负载均衡和提高系统的可用性和性能。 在 Java 生态系统中&#xff0c;Ribbon 是一个常用的客户端负载均衡框架&#xff0c;它是 Netflix 开源的一部分&…