webpack的优化配置(二)——webpack代码拆分

对于大型的webpack而言,如果把所有的东西都放在一个文件中打成一个包,这是十分低效的,也是不可接受的。webpack在默认情况下会把所有的文件都打包成一个文件(也就是一个包),代码拆分要做的就是把单个bundle文件拆分成若干个小bundles/chunks,这样可以缩短首屏的加载时间。

  • 手动定义多个入口
  • splitChunks提取公有代码,拆分业务代码与第三方库

将公有代码,业务代码和第三方库进行拆分是一个更有效的方式,业务代码随着需求的改动会有改动,但是第三方库我们几乎是不改变的,这样进行拆分后的第三方库缓存能够更持久一些,业务代码发生变化时就只会影响到自己的bundle变化。

webpack.config.js增加如下配置:

   optimization:{
        splitChunks: {
            cacheGroups: {
                vendor:{//将第三方库拆分出来
                    name:'vendor',
                    test:/[\\/]node_modules[\\/]/,
                    minSize:0,//最小大小设置成0,把所有的依赖都给提取出来变成独立的bundle
                    minChunks:1,//模块至少使用次数,当值为2时,代表只引用了一次的模块不做分割打包处理
                    priority:10,//值越大优先级越高
                    chunks:'initial'
                }
            }
        }
    },

拆分前app的bundle:
在这里插入图片描述
拆分后app的bundle体积缩小了很多。同时生产了新的vendor.bundle.js,这里实际上的业务逻辑在app.bundle.js中只有44.3k,剩下的vendor.bundle.js都是我们引入的第三方依赖:
在这里插入图片描述
接着配置抽取公共业务代码部分:

  optimization:{
        splitChunks: {
            cacheGroups: {
                vendor:{//将第三方库拆分出来
                    name:'vendor',
                    test:/[\\/]node_modules[\\/]/,
                    minSize:0,//最小大小设置成0,把所有的依赖都给提取出来变成独立的bundle
                    minChunks:1,// (默认值:1)在拆分之前共享模块的最小块数
                    priority:10,//值越大优先级越高
                    chunks:'initial'// 共有3个值"initial","async"和"all"。initial就是同步加载的模块,async是异步加载的模块,这里的同步和异步就是静态或动态引入模块的方式,all就包含了前面两种。
                },
                common:{//提取业务代码中公共的部分
                    name:'common',
                    test:/[\\/]src[\\/]/,
                    chunks:'all',
                    minSize:0,
                    minChunks:2
                }
            }
        }
    },

但是如果我们的业务本身比较复杂,而且工程比较大,我们的bundle还是会比较大,此时我们可以动态加载我们的代码。

比如:

import {add} from './math';
console.log(add(1,2))

改成动态异步加载:

import('./math').then(math => {
	console.log(math.add(1,2))//加载完成后再做的逻辑处理
})

当然不同的框架都有自己的动态加载的解决方案,webpack也有提供动态加载的解决方案。

比如本次案列中对所有的card进行动态的加载,如果开始我们还没有用到card我先不加载,只有当card被使用到的时候才动态的现加载它,加载完成后才进行相关的逻辑处理,这里我们通过react提供的lazy和suspense就可以实现。

//将Card组件改成懒加载动态引入的方式
// import Card from './Card.jsx';
const Card = lazy(() => import('./Card'))
class Home extends React.Component {
  render() {
    let cards = []
    cards.push(
      model.map((panel) => (
        <Suspense fallback={<div>loading...</div>}>
          <Card
            key={panel.name}
            image={panel.image}
            title={panel.name}
            route={panel.route}
            description={panel.body}
          />
        </Suspense>
      ))
    )
    return <main className={this.props.classes.root}>{cards}</main>
  }
}

动态加载前的打包:
在这里插入图片描述
动态加载后的打包:
在这里插入图片描述
多出来两个新的bundle 0和1

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
webpack优化配置包括通过配置`configureWebpack`和`chainWebpack`来修改webpack的默认配置,以实现不同的优化效果。 `configureWebpack`是用来修改webpack配置,它的配置内容会与webpack的默认配置进行合并。通过配置`configureWebpack`,我们可以对webpack的各个方面进行优化,比如优化代码分离、减小打包体积、使用CDN服务器等。例如,你可以在`configureWebpack`中配置`optimization`选项来进行代码分离,通过指定`splitChunks`来实现将代码分离到不同的bundle中,从而按需加载或并行加载这些文件。 `chainWebpack`则可以修改webpack的默认配置。通过配置`chainWebpack`,我们可以自定义webpack的打包过程,进行一些特定的优化。例如,你可以使用`exclude`和`cache-loader`等选项来优化打包速度。 总的来说,webpack优化配置可以分为两个方面:打包后的结果的性能优化和打包速度的优化。对于打包后的结果的性能优化,可以通过代码分离来实现。而对于打包速度的优化,可以利用webpack的默认优化配置,也可以根据项目的具体情况进行针对性的优化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Webpack 配置优化](https://blog.csdn.net/weixin_42682011/article/details/116060572)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [webpack性能优化方案(详细)](https://blog.csdn.net/weixin_57677300/article/details/130684139)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Webpack优化配置缩小文件搜索范围](https://download.csdn.net/download/weixin_38698403/12766302)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值