前言
由于后台管理项目一直在迭代开发,不知不觉项目包过大(30MB左右),每次项目上线后加载最新资源文件(chunk-vendors)用时过久。白屏时间比较长用户体验感特别差。
利用splitChunks 进行分包打包
利用splitChunks 分包将chunk-vendors 包拆分成多个chunk-xxxx.js文件。拆分后过多chunk-xxxx.js文件也会有问题,下文有详细说明和解决方案。
下面进行splitChunks 分包配置
vue.config.js文件
1module.exports = {
2 optimization: {
3 runtimeChunk: 'single',
4 splitChunks: {
5 chunks: 'all',
6 minSize: 60000,
7 maxAsyncRequests: 30,
8 maxInitialRequests: 30,
9 name:true,
10 cacheGroups: {
11 vendor: {
12 test: /[\\/]node_modules[\\/]/,
13 reuseExistingChunk:true,
14 name(module) {
15 const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
16 return `npm.${packageName.replace('@', '')}`;
17 }
18 },
19 ui: {
20 name: 'npm.ui',
21 test: /[\\/]node_modules[\\/]element-ui[\\/]/,
22 chunks: 'initial',
23 priority: 3,
24 maxSize: 600000,
25 reuseExistingChunk: true,
26 enforce: true
27 },
28 echarts: {
29 name: 'npm.echarts',
30 test: /[\\/]node_modules[\\/]echarts|echarts-gl[\\/]/,
31 chunks: 'initial',
32 priority: 3,
33 maxSize: 600000,
34 reuseExistingChunk: true,
35 enforce: true
36 }
37 }
38 }
39 }
40}
splitChunks配置说明
这里我根据个人项目需求对 element-ui echarts 进行单独分包处理,第一次配置完项目上线后发现element-ui echarts单个包还是比较大,又进行单独分包处理。也可以使用cdn方式,我这里使用了单独分包处理。
分包前
分包后
可以看到echarts 分成三个文件了。
利用splitChunks分包导致上线chunk-XX.js文件过多页面加载缓慢资源请求阻塞问题
项目第一次加载请求了所有资源包,一共发送了595次请求(看上图),这不太可怕了。浏览器一次请求6-8个,剩下下的请求都在排队中,这样就造成了阻塞,部分小文件请求排队就需要十几秒。
上线chunk-XX.js文件过多解决方法
配置vue.config.js 文件
1module.exports = {
2chainWebpack: (config) => {
3 config.plugins.delete("prefetch");
4 },
5}
这里配置使用懒加载用到组件资源再去发送请求去服务器取。 之前是预加载形式,项目第一次打开就请求所有资源文件。 分包配置结合懒加载处理可以解决一以上问题。
配置后效果
第一打开项目,请求资源文件49个,提升效果非常明显。感谢你的阅读~
个人笔记记录 2021 ~ 2025