webpack性能优化

1.source-map

因为经过webpack压缩,一般很难找出发生错误的代码,source-map构建了压缩前的代码和压缩后的代码之间的桥梁。主要是方便开发人员的错误定位。****注意区分开发环境和生产环境

// 开发环境
   eval-source-map  
  // 目前vue脚手架,react脚手架开发环境正在使用eval-source-map

// 生产环境
nosource-source-map // 隐藏构建前后的源代码
hidden-source-map //隐藏构建前的源代码,会提示构建后的代码错误
source-map // 让调试更加友好
注意:根据自己的需要选取最合适的方案

2.loder中属性

  • enforce:“pre” , // 指定此loader优先执行
  • oneOf:[] // 指定只执行一种loader,不会同一种类型文件执行多个loader, 如果多种配置处理同一种类型文件,只需要将其单独提出到rules中

3.babel 缓存

设置cacheDirectory:true (建议文件打包时候加入contenthash值,不然使用了强制缓存会存在,缓存期间无法更新修改文件的bug)

4.tree shaking 去除无用代码

1.必须使用es6模块化, 2.必须开启production模式
注意: 不需要额外的配置,根据版本的不同,会出现(副作用)文件丢失的问题,设置sideEffects

5.js分包

由于一个js文件过于庞大,把一个文件分成多个文件,实现按需加载。
// webpack.config.js中配置optimization
optimization: {
   splitChunks:{
      chunks: ‘all’
   }
}

// import动态导入
import(/*webpackChunkName: '文件名'*/ ‘文件url’)
 .then(() => {
 })
 .catch(()=> {
 })

结合这两种方式可以实现js分包

6.js懒加载和预加载

懒加载:文件需要的时候加载文件, 缺点是首次加载的时候会有一定的卡顿。(适合与移动端开发)
预加载;等其他资源加载完毕,主线程空闲的时候加载文件, 缺点是兼容性不好。(适用与pc端开发)

// 实现懒加载, 事件回调的时候使用js分包的方式加载需要的文件:
document.getElementById('btn').onclick(() => {
	import(/*webpackChunkName: '文件名'*/ ‘文件url’)
	 .then(() => {
     })
    .catch(()=> {
     })
})

// 实现预加载,再懒加载的基础上加入webpackPrefetch
document.getElementById('btn').onclick(() => {
	import(
	/*webpackChunkName: '文件名'*/,
	 webpackPrefetch:true 
	 ‘文件url’
	 )
	 .then(() => {
     })
    .catch(()=> {
     })
})

7.cdn 引入

cdn引入配合webpack的externals属性使用,优化打包体积

// webpack.config.js中配置
 externals: {
  jquery:jQuery // 拒绝jquery被打包
 }

注意: html中还需引入jqery, cdn的方式引入。

Webpack是一个现代化的前端打包工具,它可以将多个模块打包成一个或多个静态资源文件。在项目开发过程中,随着代码规模的增大,Webpack性能优化变得尤为重要。以下是一些Webpack性能优化的方法: 1. 减少打包文件体积: - 使用Tree Shaking:通过ES6模块的静态分析,去除未使用的代码,减少打包文件体积。 - 使用Code Splitting:将代码拆分成多个小块,按需加载,减少初始加载时间。 - 压缩代码:使用UglifyJS等工具对代码进行压缩,减小文件体积。 2. 加快构建速度: - 使用缓存:通过配置缓存选项,将构建过程中的中间结果缓存起来,加快下次构建速度。 - 多进程/多实例构建:使用工具如HappyPack或thread-loader,将任务分解到多个子进程或实例中并行处理,提高构建速度。 - 使用DllPlugin:将第三方库等不经常变动的模块提前打包成静态资源,减少每次构建的时间。 3. 优化文件加载: - 使用CDN:将静态资源部署到CDN上,加快文件加载速度。 - 使用缓存策略:配置合适的缓存策略,使浏览器能够缓存静态资源,减少重复加载。 - 按需加载:使用动态import或异步组件等方式,按需加载模块,减少初始加载时间。 4. 配置优化: - 减少不必要的插件和loader:只加载必要的插件和loader,减少构建过程中的处理时间。 - 使用resolve.alias:配置别名,减少模块查找时间。 - 使用externals:将一些不需要打包的模块通过externals配置引入,减小打包体积。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜丶陌颜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值