Skip to content

项目基于 umi4 开发,打包后 20M,umi.js 文件 8M,在 umi4 中如何进行拆包?我可以尝试哪些优化? #11884

Answered by fz6m
luxiaoxiao5056 asked this question in Q&A
Discussion options

You must be logged in to vote

如果你的多语言占了很大体积,就动态加载吧,参考 i18n 这个章节,自己做一个切换语言的组件和逻辑(可参考 ./src/.umi/plugin-locales/* ),等到用户切换的时候去动态拉取语言文件( json 或 await import('./path/to/locales/lang/xxx') )再 addLocale ,拉完了再用导出的 i18n 方法 setLocale 改变语言就行,其他语言就可以从默认 umi.js 里全部拆出去了。

参考 代码拆分指南

  1. 如果你有编辑器或者图表的页面,最好把这些组件手动懒加载拆出去,但 umi 已经按页默认拆包了,如果你想提升首屏开的速度,最好重点针对第一屏拥有的东西做拆分。

  2. 可以试试 codeSplitting 里面的 depPerChunkgranularChunks 这俩方案,能把依赖单独拆出去变为 js 包,这样可以降低默认 umi.js 的包大小。

砍掉 locales 和用了 codeSplitting 策略之后估计能少 5-6 M 左右,antd 和 antd icon 因为每个页面都有,预计能带来 3 M 左右的大小,这个没法避免,如果 umi.js 在 3-5 M 都是可以接受的,因为 cdn 缓存的话,第一次加载完之后就缓存了,第二次进系统不需要下载 js 很快的(如果没有做 cdn 或者 nginx 网关缓存响应头的话自己做一下)。

剩下能扣的优化比如把固定依赖变成 umd external 加载(仅生产),比如:

// .umirc.ts

 externals: isProd

Replies: 2 comments 1 reply

Comment options

You must be logged in to vote
1 reply
@luxiaoxiao5056
Comment options

Answer selected by luxiaoxiao5056
Comment options

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
3 participants