背景:

2017.01.09 小程序上线时,微信限制了代码包不能超过1MB 大小,(现在是2M了)限制大小是出于对小程序启动速度的考虑,希望用户在使用任何一款小程序时,都能获得一种“秒开”体验。然而,2MB 的大小也限制了小程序功能的扩展,小程序业务的发展可能需要更大的体积。

那么,能否有一种方案,在增加小程序包大小的同时,也能保持不错的启动速度呢?

为了解决这个矛盾点,微信推出了「分包加载」这个技术方案。

分包加载的介绍

大部分小程序都会由某几个功能组成,通常这几个功能之间是独立的,但会依赖一些公共的逻辑,并且这些功能通常会对应某几个独立的页面。那么小程序代码的打包,大可不必一定要打成一个,可以按照功能的划分,拆分成几个分包,当需要用到某个功能时,才加载这个功能对应的分包。

对于用户来说,小程序加载流程变成了:

1.首次启动时,先下载小程序主包,显示主包内的页面;

2.如果用户进入了某个分包的页面,再下载这个对应分包,下载完毕后,显示分包的页面。

采用分包加载,对开发者而言,能使小程序有更大的代码体积,承载更多的功能与服务;而对用户而言,可以更快地打开小程序,同时在不影响启动速度前提下使用更多功能

分包的划分

在配置前首先需要开发者规划下各个分包需要容纳的内容,我们建议开发者按照功能划分的的原则,将同一个功能下的页面和逻辑放置于同一个目录下,对于一些跨功能之间公共逻辑,将其放置于主包下,这样可以确保在分包引用这部分功能时,这部分的逻辑一定存在。

在分包划分时,应该注意以下事项:

1.避免分包与分包之间引用上的耦合。因为分包的加载是由用户操作触发的,并不能确保某分包加载时,另外一个分包就一定存在,这个时候可能会导致 JS 逻辑异常的情况,例如报「"xxx.js" is not defined」这样的错误;

2.一些公共用到的自定义组件,需要放在主包内。

分包的配置

当理清了分包的划分后,就可以进行分包的配置了,这一步并不复杂。

假设支持分包的小程序目录结构如下:

开发者通过在 app.jsonsubPackages字段声明项目分包结构:

分包加载的低版本兼容问题

微信 6.6.0 版本开始支持分包加载,而对于低于这个版本的客户端,我们做了兼容处理,开发者不需要对老版本微信客户端做兼容。

对于老版本的客户端,编译后台会将所有的分包打包成一个整包,老版本的客户端依然按照整包的方式进行加载。

所以在老版本的微信客户端下,是依然采取整包加载的方式加载的,建议开发者尽量控制代码包的大小。

目前小程序分包大小的限制:

  • 整个小程序所有分包大小不超过 4M

  • 单个分包/主包大小不能超过 2M

随着时间推移,老版本覆盖率降低,我们会考虑进一步扩大代码包的大小。

分包加载的详细使用方法、示例项目文档上已有介绍,可查看接口文档:分包加载

如果其他问题,欢迎在评论区留言。

- END -

如果大家有想了解的小程序相关能力的故事,欢迎在评论区留言,我们后续会考虑将这些能力背后的故事分期分享给大家。

小程序超过2M限制的方法——分包加载相关推荐

  1. 微信小程序:uni-app 小程序打包超过2M限制的方法—分包加载

    摘自微信小程序官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/subpackages.html 起初小程序上线时,微信限 ...

  2. uniapp 小程序超过2M的解决方法——分包

    小程序限制: 整个小程序所有分包大小不超过 8M  单个分包/主包大小不能超过 2M 如果小程序每个包超出了2M,不能预览和上传,所以需要分包 不难!不难!一点也不难!操作起来很简单 1.在根目录(p ...

  3. 微信小程序开发(三):分包加载

    微信小程序分包加载 小程序开发完成后,开发者需要将代码包上传到小程序管理后台上线,这时候我们会发现,小程序后台对开发者上传的代码包有严格的大小要求:本地代码超过2M就会限制上传. 目前小程序分包大小有 ...

  4. html下拉刷新原理,微信小程序 下拉刷新及上拉加载原理解析

    这篇文章主要介绍了微信小程序 下拉刷新及上拉加载实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.下拉刷新的概念及应用场景. 概念: 下拉 ...

  5. 微信小程序开发——设置默认图片、错误加载图片

    wxml: <image src='{{imgArr[index]==""?defaultImg:imgList[index]}}' binderror="erro ...

  6. 【微信小程序】实现小程序下拉刷新与上拉加载

    微信小程序内置的上拉加载.下拉刷新与Android原生的有所不同,Android原生下拉刷新用SwipeRefreshLayout组件,重写onRefresh方法,而上拉加载则是使用RecycleVi ...

  7. 微信小程序分享海报/卡片 生成时一直加载可能存在的问题

    微信小程序分享海报/卡片 生成时一直加载可能存在的问题 很多时候,开发者在调试小程序的分享图时,总是会遇到不能正常生成的问题,这里面还是有许多的坑.这一次就把我个人所知道的问题分享一下. 第一种情况: ...

  8. 微信小程序中实现瀑布流布局和无限加载

    瀑布流布局是一种比较流行的页面布局方式,最典型的就是Pinterest.com,每个卡片的高度不都一样,形成一种参差不齐的美感. 在HTML5中,我们可以找到很多基于jQuery之类实现的瀑布流布局插 ...

  9. 微信小程序实战篇-下拉刷新与加载更多

    下拉刷新 实现下拉刷新目前能想到的有两种方式 调用系统的API,系统有提供下拉刷新的API接口 下拉刷新API.png 监听scroll-view,自定义下拉刷新,还记得scroll-view里面有一 ...

  10. 微信小程序 首页的广告弹窗,只加载一次

    功能:微信小程序,首次进入页面时显示广告弹窗,点击空白处/点击关闭按钮,隐藏此弹窗(7秒后自动隐藏弹窗). <!-- 页面的广告图片 --> <view class="mo ...

最新文章

  1. IIS 7.5 去掉index.php 西数服务器
  2. 系统优化怎么做-SQL优化
  3. [读书笔记]《Head First Servlets JSP》2nd
  4. POJ 2342 (树形DP)
  5. 使用SAP Cloud Platform fullstack WebIDE创建SAP UI5应用并部署
  6. mysql 不要统计null_浅谈为什么Mysql数据库尽量避免NULL
  7. x86异常处理与中断机制(3)中断处理过程
  8. 苹果开发者账户需要同意并添加电话号码,苹果账号忘记验证问题解决方案
  9. mysql_config缺失_安装 mysqlclient 报 mysql_config not found
  10. 定制版商业计划书PPT模板
  11. 30分钟!用Django做一个迷你的Todolist!下篇!
  12. Java中如何保证线程安全
  13. matlab质心原理图,matlab:绘制质心
  14. cesm2(clm5.0)移植方法
  15. luajit集成篇/平台相关篇 | 合理用好lua+unity,更省性能的方案整理
  16. OpenCV学习笔记
  17. 互联网日报 | 快手向港交所递交上市申请;苏宁双十一退货上门取件免费;小米明年扩招5000名工程师...
  18. python机器学习之决策树(decision tree)
  19. yy直播接口开发手册php,微信小程序 服务端接口·直播间接口
  20. 计算机科学创新大赛,计算机学院大学生创新项目入围挑战杯大赛

热门文章

  1. ai的预览模式切换_ai模式切换快捷键是什么,Adobe Illustrator模式切换快捷键是什么?...
  2. QT中on_pushButton_clicked()用法
  3. Typora免费版官网下载
  4. 泛微云桥e-birdge之金蝶云之家集成配置手册
  5. Python爬取NBA虎扑球员数据
  6. 预测nba本赛季球队夺冠的胜率并进行相关分析
  7. 基于STM32F4实现FOC(磁场定向控制)一:电流采样和波形产生
  8. 【英文学术论文写作 | 笔记】第一讲 学术研究与英文学术论文写作概述
  9. Linux 安装谷歌浏览器
  10. wps空白页怎么删除,迅速帮你解决问题