方式一:按需引入部分antd并按组件分离打包
希望得到的结果是将antd按组件加载,减少首屏加载的包大小;
antd 又依赖于相应的rc模块,所以,rc同样按功能组分离,
同时antd->moment->local->各种语言包存在依赖关系
统计结果:
首屏加载 js: 769Kb 个数:34
bundle | antd | rc | moment | local | common | 其他 | 合计 |
---|---|---|---|---|---|---|---|
307.23Kb | 154.95Kb | 454.95Kb | 104.05Kb | 106.85Kb | 157.67Kb | 219.58 | 1.47M |
如果在按需引入antd的timer-picker等时间相关的组件时,会同时加载moment的/locale的语言库,在我当前的场景中我只是用了中文,所以这部分开销几乎都是浪费的
方式二:外链引入antd
方式
统计结果:
首屏加载 js: 987Kb 个数:11
bundle | common | antd | moment | local | 其他 | 合计 |
---|---|---|---|---|---|---|
297.92Kb | 15.13Kb | 1.11Mb | 50.5Kb | 3.77Kb | 186.83Kb | 1690.79Kb |
如果选择加载所有的antd组件,local 可以做按需加载了,但是未使用到的组件就会在首次加载时全部加载,存在一部分宽带浪费;
方式三:将按需将部分ant及其依赖打包至common.js
统计结果:
首屏加载js: 868Kb 个数:8
bundle | common | 其他 | 合计 |
---|---|---|---|
298.01Kb | 819.08Kb | 347.22Kb | 1.43M |
同样存在会同时加载moment的/locale的语言库的浪费
对比结果:
方式一 (非全量) | 方式二(全量) | 方式三(非全量) | |
---|---|---|---|
包总大小 | 1.47M | 1.65Mb | 1.43M |
antd相关 | 609.9Kb | 1.11Mb | 596.82Kb |
首屏加载js | 769Kb | 987Kb | 868Kb |
首屏加载个数 | 34 | 11 | 8 |
其他知识点
1、antd 依赖于模块[“react”, “react-dom”, “moment”,“rc”]
2、antd 的版本分为 antd(308kb) 和 antd-with-local(425kb) 两个版本