微信小程序分包

2020-03-10 周二 阴

简述什么是分包、为什么要分包以及分包的优缺点,罗列分包相关规则和大坑

背景

微信客户端在打开小程序之前,会把整个小程序的代码包下载到本地的,这种策略可以缓解页面跳转时白屏的问题。同时微信还对小程序代码包大小设置了 2M (最初只有 1M)的上限来确保小程序能有还不错的启动速度。

但是在发展过程中,开发者(的老板)普遍觉得 2MB 的大小限制了小程序功能的扩展,不利于业务开展。为了解决这一问题,微信推出了分包加载这一方案。

什么是分包加载

引用官方文档的解释:

某些情况下,开发者需要将小程序划分成不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。

说得很明白,以前代码是打成一个包下载下来的,分包加载就是用到哪个包才下载哪个(先不提主包和预加载等等机制)。和 webpack 里的代码分割是一种操作。

为什么分包

在我的项目中分包的动机可能有以下几点:
· 功能还没做完代码包就已经 2M 了,不得不分
· 功能已经做完,空间还有富余但是产品经理意犹未尽,未雨绸缪
· 看原型就知道 8M 空间也挡不住的...

总之,我的观点是除非一开始就能确定代码包肯定不会超限,否则越早规划分包方案越好,拖得越久需要处理的问题越多。

分包的优缺点

优点:
最大的优点当然是突破 2M 限制了,可以大大扩展小程序承载的业务。此外分包规划得当,精简主包,能够极大优化冷启动速度,重新带来丝滑体验。
》官方:在多团队共同开发时可以更好的解耦协作。(再也不用合代码了)

缺点:
如果你是在后期才开始策划分包,ennn 你要处理以下麻烦事:

  • 分包后资源url变动,需要找出所有引用资源的地方并更新
  • 分包后页面url变动,需要找出所有导航并更新
  • 已经分享出去的二维码、小程序码、链接都需要做兼容(因为页面url可能变了)或者放弃
  • 需要耗费一定精力规划分包方案

相关概念

  • 主包/分包

    主包,即放置默认启动页面/TabBar 页面,以及一些所有分包都需用到公共资源/JS 脚本;而分包则是根据开发者的配置进行划分。

  • 独立分包

    独立分包是小程序中一种特殊类型的分包,可以独立于主包和其他分包运行。从独立分包中页面进入小程序时,不需要下载主包。当用户进入普通分包或主包内页面时,主包才会被下载。
    开发者可以按需将某些具有一定功能独立性的页面配置到独立分包中。当小程序从普通的分包页面启动时,需要首先下载主包;而独立分包不依赖主包即可运行,可以很大程度上提升分包页面的启动速度。
    一个小程序中可以有多个独立分包。

  • 预下载

    开发者可以通过配置,在进入小程序某个页面时,由框架自动预下载可能需要的分包,提升进入后续分包页面时的启动速度。对于独立分包,也可以预下载主包。

分包规则

分包也是有大小限制的:(以官方文档为准)

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

重要规则:

  • 使用分包的小程序必定有一个主包,tabBar 页面必须在主包内
  • 主包不可以引用子包内容
  • 子包只可以引用自己包内和主包内的内容
  • 子包内不能嵌套子包
  • 独立分包不能引用其他包的内容,且主包中 app.wxss 对独立分包无效
  • 独立分包中暂时不支持使用插件

上述 “内容” 指 js文件、template、wxss、自定义组件、插件等

注意事项

  • root字段(子包根目录)配置路径外的目录将被打包到主包中
  • 跳转外部包页面、引用主包资源最好使用绝对路径(/ 开头),使用相对路径时要注意,当前路径是js文件所在路径。
  • 独立分包:官方文档
  • 预下载也需要注意 2M 限额

如何配置分包

demo:https://developers.weixin.qq.com/s/ta9sVKme7wf1

➡️https://developers.weixin.qq.com/miniprogram/dev/framework/subpackages/basic.html

复制模板

app.json

{
...
"subpackages": [
    {
      "root": "根目录", 
      "name": "预加载时可以使用的别名",
      "pages": [
        "相对于root的页面路径"
      ],
      "independent": false
    }
],
"preloadRule": {
    "页面路径": {
      "packages": ["分包root或name,__APP__ 表示主包"],
      "network": "all | wifi"
    }
}
...
}

END

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • 分包加载 背景 微信官方出于小程序的启动速度的考虑,对代码包的大小进行了限制。但是同样也限制了小程序功能的扩展,为...
    kll982982阅读 765评论 0 1
  • 前言 对于一个展示型的小程序而言,势必会存在着众多的图片来展示,而UI设计师给出的图片大多数都会很大,这样就会很大...
    熊猫饲养员文文阅读 5,766评论 3 6
  • 设置分包加载 微信小程序分包限制为: 主包或者单个分包最大为2M 整体小程序所有包最大为8M 为什么需要设置分包?...
    读心的心阅读 1,209评论 0 1
  • 什么是分包? 在构建小程序的分包项目时候,构建会输出一个或者多个功能的分包。其中每个分包小程序必定会包含一个主包,...
    Gopal阅读 5,233评论 2 0
  • 有时候小程序“上传”或者“预览”的时候,提示分包大小超过8M,没办法,只能进行分包加载了。所以,当时官网查了下,目...
    程序员三千_阅读 9,405评论 2 3