干货 | 携程微信小程序如何进行Size治理

小程序开发经验分享(7)小程序大小的优化 2,图片压缩,(主要是压缩静态资源,ps 可以压缩,然后有一些在线压缩工具,保持600-800kb 的静态);1,不要下两倍尺寸的图片, 小程序本身自己就会对元素缩小两倍,设计图片的一杯就已经很清晰了;4,是在工程量太大可以分包,分包现在最大支持20M(一般都不会去分包的);温馨提示:太大的图片可以放服务器,所有的放服务器会导致用户体验不好。5,上传的轮播图和其它商品图片,尺寸控制在800*800px以内;6,上传单文件大小控制在300k以内;7,不定期清除缓存和多余的文件;3,通用的代码组件化; 阅读详情

作者简介

 

携程前端框架团队,为携程集团各业务线在PC、H5、小程序等各阶段提供优秀的Web解决方案。产品涉及各类前端/Node端应用框架、研发工作台、前端中台化、静态资源发布系统等。当前主要专注方向包括:新一代研发模式探索,Rust构建工具链路升级、Serverless应用框架开发、在线文档系统开发、低代码平台搭建、适老化与无障碍探索等。

一、背景


众所周知,无论是微信小程序、支付宝小程序或者其他类型的小程序,代码包都是有大小限制的。目前微信官方规定,整个小程序不超过20M,单个分包或主包大小不超过2M。之所以这样限制,是对小程序启动速度的考虑,微信希望用户在使用任何一款小程序时,都能获得一种”秒开“体验,这也正是小程序的优势所在,但同时也对开发人员提出了更高的要求。


携程小程序涉及30+条业务线,上百个开发人员,目前包体积已经向着微信限制的20M迈进,包体积过大必将导致新增业务受限、启动慢等问题,这些都给用户带来了不好的使用体验,因此对Size的治理势在必行。


为了能够合理有效的利用有限的Size,我们设计了一套自己独有的Size治理方案,如图1所示:

038d32a15e1c30a201c661088725476c.png图1 携程小程序Size治理

从图中可以看出,Size治理包括Size监控机制和主包文件管理机制,这两个机制的实现离不开小程序管理平台的支持。小程序管理平台是携程内部用于管理各类小程序(微信、百度、支付宝等)的官方系统,是一个集小程序配置、发布、审批、数据统计于一体的系统。接下来我们将对其进行详细的介绍。

二、Size监控机制


2.1 Size分配


在《携程微信小程序如何协同开发》一文中我们提到过,携程将整个小程序划分数十条业务线(即Bundle),每个Bundle可以拥有多个分包。我们为每个Bundle设置一个约定好的阈值,该值包括两部分:永久Size + 临时Size。顾名思义,永久Size是Bundle的固有Size,临时Size是指到了约定日期将自动回收的Size,这些信息都在小程序管理平台系统中进行配置,如图2所示:


57de1bb5bf5a642644d238083f3250c4.png

图2 Size分配

从图中可以看出,pages/train 的Size为:1888KB(永久Size) + 155KB(临时Size)。在到达约定日期之前,该Bundle的开发人员必须调整代码至永久Size大小(即1888KB),否则该Bundle提交新的代码时,将不能通过Size检查阶段。

2.2 Size检测      

每当业务方提交代码至发布分支时,都会自动触发pipeline的构建,此时会对当前Bundle的实际Size进行检测,如果超过约定的Size值,会强制中断构建过程,并发送失败信息至相关发布群及开发人员,强制不让代码提交至发布分支,以此实现Size检测的能力,报错信息如图3所示:

b3379400ef5871368ac87f2f30173988.png

图3 Size检测结果通知

通过Size分配和Size检查,强制业务方主动优化代码、自行下线流量较少的老业务代码,为新业务提供空间。同时,我们也提供了Size申请审批流程,业务方可通过申请临时Size获取额外的Size空间,如果临时Size达到了内部相关要求,也可以申请转换为永久Size。

2.3 Size申请审批   

当Bundle必须通过申请临时Size才能上线新的需求时,Bundle Owner可以在小程序管理平台上创建临时Size申请单,由相关委员会审批后决定是否通过临时Size申请。如果以后想将临时Size转换为永久Size,需要理由足够充分,并且约定好业绩指标,才可以申请永久Size。申请平台如图4所示:

9a9cc2f80550df0e7e1551111e4f9213.png

图4 Size申请审批

通过提高Size的申请成本,促使业务方更合理的利用有限的Size,防止无限制的代码堆砌、造成代码冗余。

2.4 Size提醒   

为了督促各业务方能够按时归还临时Size,防止Size不足导致发布失败,我们设计了一套Size提醒机制,每天会给满足以下任意一条的Bundle Owner发送消息提醒:

  • 含有临时Size的Bundle;

  • 临时Size到期的Bundle;

  • Size超限的Bundle。 

提醒消息如图5-6所示:

13e85ecd2d7f8f4b9cb326c628f5b2bd.png

图5 临时Size倒计时提醒

a0c3b66e5ee89423fc7e8c279de3db41.png

图6 Size超限提醒

通过消息提醒,促使Bundle Owner合理排期优化代码、缩减Size,起到了预警、监督、告示的作用,防止临时Size的回收致使新业务无法正常发布的情况。

2.5 Size数据统计

在小程序管理平台中,我们也提供了数据统计的功能,可以多维度的展示Size的趋势变化,比如BU维度的、Bundle维度、分包维度等;也可以查看小程序中各个BU的Size占比情况等,如图7-8所示。通过统计可以让我们直观的了解各个业务线的活跃程度以及Size的分配情况。

9af5d7a492e3b8c831b1b94830f78a44.png

图7 BU总体Size趋势图

be9f2168018561f56558da8f836aa8ab.png

图8 Bundle Size趋势图

三、主包文件管理机制

每个小程序必定都有一个主包,所谓的主包,即放置默认启动页面或TabBar 页面,以及一些所有分包都需用到公共资源。小程序启动并进入非独立分包页面时,默认会下载主包,并且自动执行主包的脚本,主包的体积直接影响首屏渲染性能,关乎用户初次使用的体验,因此对主包文件的管理有着重要的意义。接下来,我们将从主包文件的管理和检查两方面进行详细介绍。

3.1 主包文件管理

小程序管理平台提供了对主包文件的可视化管理功能,主包文件的查看、增加、删除操作均可在管理平台上进行配置,如图9所示:

892ee4cade09475feaf9aad82576bd2d.png图9 主包文件管理

通过管理平台,我们可以快速获取主包中的文件内容以及文件的归属情况,配置后的数据将作为参照用于主包文件的检查。

3.2 主包文件检查

每当代码提交进行pipeline构建时,我们会通过微信的规则筛选出可能会打包到主包中的文件,将该列表与小程序管理平台上配置过的主包文件列表进行对比,如果存在未配置过的文件,会强制中断构建过程,并将构建结果发送至相关发布群即开发人员,以此实现主包文件的管理,报错信息如图10所示:

6b630d27778bc5d18a5a7c53f75e7186.png

图10 主包文件检查

通过对主包文件进行清理,并对主包中的文件进行严格限制之后,主包Size下降了46.5%,如图11所示,目前已趋于稳定状态。主包管理机制防止业务线随意向主包中添加文件,做到了可感知、可控制,同时对提升首屏渲染性能有着重大意义。

a408c7b7027ff3099e857f12813852b3.png

图11 主包文件Size变化趋势图

三、总结

综上所述,携程小程序Size治理方案主要包括Size管控机制和主包文件管理机制,实现了对Size的分配、检测、申请、提醒、统计能力,该方案在微信小程序中被充分地实践着,小程序的Size去向、占比都更加直观透明的展示出来,防止随意滥用。目前微信小程序的Size已趋于稳定状态,后续将逐步应用于其他类型的小程序中。

【推荐阅读】

6c40496ade1561b544010e5f585c1879.png

 “携程技术”公众号

  分享,交流,成长

7.3 空间矢量调制(SVM)整数算法 本文提出了一种基于整数运算的空间矢量调制(SVM)优化实现方案,适用于计算资源有限的Cortex-M0平台。针对传统SVM算法中复杂的三角函数和浮点运算问题,重点优化了扇区判断和占空比计算两个关键环节。在扇区判断方面,采用基于电压分量符号和相对大小的三变量法,避免了角度计算;在占空比计算方面,通过几何关系将作用时间表示为电压分量的线性组合,并采用定点数实现。方案还详细讨论了系数定点化、死区补偿等实现细节,在保证精度的同时显著降低了计算复杂度。实验结果表明,优化后的整数算法在M0平台上仅需50-80个周期即可 阅读详情

相关推荐

避开这些坑!baostock获取股票数据时最容易犯的5个错误(Python实战)

本文针对使用Python和baostock库获取股票历史数据时常见的五大陷阱,提供了实战解决方案。重点剖析了登录状态验证、参数配置、数据解析、批量操作效率及数据一致性校验等关键环节,帮助开发者构建稳健高效的数据获取流程,避免因细节疏忽导致的数据错误或性能瓶颈。

websocket5live的博客 1440

小程序--分包加载

分包加载 微信客户端 6.6.0,基础库1.7.3及以上版本开始支持。开发者工具请使用 1.01.1712150 及以上版本,可点此下载。 某些情况下,开发者需要将小程序划分成不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。 在构建小程序分包项目时,构建会输出一个或多个分包。每个使用分包小程序必定含有一个主包。所谓的主包,即放置默认启动页面/TabBar...

子钦加油的博客 385

从URDF到Gazebo:一个完整的ROS2机械臂仿真与运动控制实战指南

本文提供了一个完整的ROS2机械臂仿真与运动控制实战指南。详细讲解了从URDF建模、ROS2 Control配置到Gazebo物理仿真的全流程,重点介绍了如何利用MoveIt2快速搭建高级运动规划系统,并解决实际部署中的常见问题,帮助开发者高效、安全地进行机器人算法验证与开发。

red88的博客 573

【微信小程序】按钮button组件宽设置无效解决方案

在小程序里设置button组件的width竟然失效,让我们来看看原因和解决方案。

向着光芒的女孩 6629

Python Trimesh库实战:5分钟搞定STL文件解析与3D模型可视化

本文介绍了如何使用Python的Trimesh库快速解析STL文件并进行3D模型可视化。通过简洁的代码示例,演示了从环境搭建、模型加载、几何数据提取到基础变换和批量处理的核心流程,帮助开发者和工程师在5分钟内高效完成3D数据处理与可视化任务。

weixin_32005771的博客 159

桁架 拓扑优化 matlab程序_拓扑优化在结构轻量化及板壳加筋肋最优布置的应用...

1 拓扑优化简介材料的有效利用一直都是人类追求的目标,也是许多研究领域不变的话题,并伴随着结构优化理论和方法的产生而发展。结构优化设计通常分为三个层次:(1)拓扑优化:在一个确定的连续区域内寻求结构内部非实体区域位置和数量的最佳配置,寻求结构中的构件布局及节点联结方式最优化,使结构能在满足应力、位移等约束条件下,将外载荷传递到结构支撑位置,同时使结构的某种性态指标达到最优;(2)形状优化:指在保持...

weixin_39525355的博客 1877

微信小程序的首包大小

微信小程序的首包大小限制为 2MB,开发者需要在这个限制内进行资源的优化和管理,以确保小程序能够快速、流畅地运行。通过合理的设计和技术手段,开发者可以有效地提升小程序的性能和用户体验。微信小程序的包体容量限制是为了提升用户体验、优化资源管理、维护平台稳定性、引导开发者高效开发以及考虑设备性能等多方面的综合考量。这种设计理念旨在确保小程序能够在移动互联网环境中快速、流畅地运行,满足用户的需求。微信小程序的首包大小会算入到微信 App 的整体包体中,影响用户的下载和使用体验。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1810

【Pytorch教程】:卷积神经网络 CNN

Pytorch教程目录 Torch and Numpy 变量 (Variable) 激励函数 关系拟合(回归) 区分类型 (分类) 快速搭建法 批训练 加速神经网络训练 Optimizer优化器 卷积神经网络 CNN 目录Pytorch教程目录什么是卷积神经网络 CNN卷积 和 神经网络池化(pooling)流行的 CNN 结构CNN 卷积神经网络MNIST手写数据CNN模型训练可视化训练全部代码 什么是卷积神经网络 CNN 卷积 和 神经网络 卷积神经网络是如何运作的呢, 举一个识别图片的例子, 我们知

nanke_4869的博客 8087

【微信小程序】组件使用及属性参考

小程序组件微信小程序的开发实际上也是前端开发的一种。我们想要开发一个前端程序,首先要做的就是创建美观的页面,然后处理好业务代码。在用户眼中首先会看到的是页面,而不会关心代码的实现,所以在学习前端开发时通常都是先从HTML、CSS入手,再去学习JavaScript。所以,本章先进行小程序组件的讲解。掌握了视图容器组件、内容组件,并学会使用导航组件进行跳转后,我们就可以开始搭建各种页面了。......

choice~的博客 8087

【雕爷学编程】MicroPython手册之 Teensy 4.1 实时时钟 (RTC)

在类的初始化函数中,定义了用于控制I2C总线的i2c对象和RTC模块的I2C地址。接着,使用该引脚初始化了一个Pin对象。它还提供了8个串口,3个SPI端口,3个I2C端口,2个I2S/TDM数字音频端口,3个CAN总线(其中一个支持CAN FD),以及一个SDIO(4位数据)原生SD卡端口12。2、内存:Teensy 4.1配备了1024 KB的RAM(其中512 KB是紧密耦合的),8 MB的Flash(其中64 KB用于恢复和EEPROM模拟),以及两个位置可以选择添加更多的QSPI内存芯片。

雕爷学编程 575

CAN总线数据采集与分析

在CAN总线数据采集中,数据采集是指从CAN网络中获取数据,并将其存储在本地或远程数据库中。数据源:明确数据源,如CAN总线、CANoe/CANalyzer工具等。数据格式:确定数据格式,如CAN消息、信号值、环境变量等。数据存储:选择数据存储方式,如本地文件、数据库、云存储等。在CAN总线数据分析中,数据分析是指对采集到的数据进行处理和分析,以提取有用的信息。数据处理:对采集到的数据进行处理,如滤波、去噪、归一化等。数据分析:对处理后的数据进行分析,如统计分析、趋势分析、故障诊断等。数据可视化。

闲人编程的博客 4043

微信小程序代码最大限制2M的解决方案

了解小程序有最大代码量限制之前需要先了解微信小程序的本质:前端近几年都处于技术爆炸时期, react 最早的是facebook开源的开发框架----react,支持移动网页和原生app的开发(react native),提倡一次学习,全渠道开发。目的是让产品研发更聚焦更敏捷,它有三个重要特性: 数据绑定:数据驱动交互 模块化:可复用的轮子 多终端渲染:适配多客户端,用前端技术就能实现原生app R...

要和代码过一辈子的博客 12万+

把开源 Skills 集成到 LangGraph 项目

1. 定义智能体状态(必须包含 messages,其他字段按需扩展)messages: List[HumanMessage | AIMessage | ToolMessage] # 消息流(核心)skill_output: Optional[str] # 存储 Skill 执行结果next_node: str # 控制流程跳转# 2. 定义智能体决策节点(决定是否调用 Skill)"""智能体决策逻辑:根据用户输入判断是否调用开源 Skill"""# 获取最后一条用户消息。

lpfasd123的博客 900

小程序基本命令

onLoad: function () { // 生命周期函数--监听页面加载 onReady: function () { // 生命周期函数--监听页面初次渲染完成 }, onShow: function () { // 生命周期函数--监听页面显示 }, onHide: function () { // 生命周期函数--监...

aiven1637的博客 3558

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【微信小程序入门到精通】— button 和 image 超详细讲解

对于目前形式,微信小程序是一个热门,那么我们该如何去学习并且掌握之后去做实际项目呢?为此我特意开设此专栏,在我学习的同时也将其分享给大家!本文主要给大家介绍一下 button 和 image 组件,接下里我将逐一进行讲解!如果在往下阅读的过程中,有什么错误的地方,期待大家的指点!大家每天都要开开心心的喔,让我们一起快乐的学习吧!

热爱生活,积极向上的阿酱! 6347

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

关于微信小程序的尺寸关系

在微信小程序开发中,大家尽量使用rpx为单位, px实际上就是系统级的rem(把页面按比例分割750份,1rpx=window.innerWidth/750),或者scale伸缩布局的width=750。也就是说,微信小程序的rpx布局帮大家把rem布局的js设置根元素字体尺寸这步省了,用rpx就减少了媒体查询的那些步骤 通过rpx,大家只需要根据750的设计稿写代码即可,不必担心它在各个平台...

weixin_30535913的博客 730

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

微信小程序_1,基础配置及其开发工具

微信小程序开发,学习,

没得简介 4391

微信小程序文件构成及属性

1.小程序的文件构成 小程序(MiniProgram)在不分包的情况下最大2MB(是所有小程序内所以资源(包括图片、音频、视频等)的字节数);在分包的情况下最大20MB 小程序代码由以下文件类型构成: .json文件 .json文件是静态配置信息文件 app.json,全局配置信息文件 page.json,页面配置信息文件,页面配置优于全局配置。 .wxml文件 .wxml文件在小程序开发中充当HTML角色,.wxml文件用于实现微信页面的结构。 .wxml文件中不能使用任何的HTML标签,只能使用小程

happy_1212的博客 1549

微信小程序开发解决按钮大小问题

我想要的按钮效果(按钮宽度占屏幕90%): 一开始不知为何,样式一直是这样的: button的size属性有两个值,如下图: 我使用了默认大小default,设置了样式宽度为90%,然而样式没有起作用,代码见下: 最后发现是因为app.json里style的原因: 以下是官网对style的说明: ...

Anning 7128

微信小程序界面设计入门课程-样式wxss中使用css课程-字体-font-size字体大小

font-size字体大小 基础语法 有能力管理文本的大小在 web 设计领域很重要。但是,您不应当通过调整文本大小使段落看上去像标题,或者使标题看上去像段落。 请始终使用正确的 HTML 标题,比如使用 - 来标记标题,使用 来标记段落。 font-size 值可以是绝对或相对值。 绝对值: 将文本设置为指定的大小 不允许用户在所有浏览器中改变文本大小(不利于可用性) 绝对大小在确定了输出...

杭州.黄老师 7437

微信小程序学习(10)-button控件

button控件学习 1.button属性 2.size和type属性对button的影响 size属性的默认值为default,type属性的默认值也为default,如果值为default时,该属性可以省略; size属性为default size属性为mini size属性为default size属性为mini

sinat_36772813的博客 6万+

微信小程序html的font-size,字体大小(font-size)

1.基础语法有能力管理文本的大小在 Web 设计领域很重要。font-size 值用于设置字体的大小。但是,不要通过调整文本大小使段落看上去像标题,或者使标题看上去像段落。请始终使用正确的 HTML 标题,比如使用 - 来标记标题,使用 来标记段落。font-size 值可以是绝对或相对值。n绝对值:将文本设置为指定的大小。不允许用户在所有浏览器中改变文本大小(不利于可用性)。绝对大小在确定...

weixin_42115074的博客 1万+

微信小程序中的尺寸问题

rpx:适应性尺寸

langhuage的博客 1466

微信小程序reporter error:Maximum call stack size exceeded

wxml :<view> <text>{{title}}</text> <button bindtap="setData">setData</button> </view> js : setData: function(){ this.setData({ title: 'after' }) }莫名奇妙报错: reporter error:Maxi

crazyboy12138的博客 8215

微信小程序:修改按钮BUTTON尺寸

1.微信小程序BUTTON常见属性: 2.BUTTON宽高等样式的有效调整方法: 微信小程序当中通过wxss来设置button的宽高值并不起效果,而size属性却只有两个合法值,当我们想要自定义大小时则: 在 标签中直接写 style即可: <button style="width: 90vw;height: 8vh;background-color: aqua;"> 在线客服222 </button> 3.button按钮open-type属性: ..

m0_60643169的博客 1万+

微信小程序--修改switch组件的大小size

修改switch组件的大小 小程序中switch组件的大小往往和实际项目中的大小有些出入,但是发现文档中并没有修改大小的方法,但是可以根据自己的实际情况进行颜色设置。 直接上代码: <switch checked>正常开关</switch> <switch checked style="transform:scale(0.7)" color="red">开关</switch> <switch checked style="zoom:0.6" color=

ZHHhao的博客 1990
上一篇: 干货 | 支持10X增长,携程机票订单库Sharding实践
下一篇: 开源|携程机票 App KMM 跨端 KV 存储库 MMKV-Kotlin
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值