webpack 性能优化

webpack性能优化

  • 开发环境性能优化
  • 生产环境性能优化

开发环境性能优化

  • 优化打包构建速度
  • 优化调试功能

生产环境性能优化

  • 优化打包构建速度
  • 优化代码运行的性能

开发环境调试代码 source-map

sourcemap是一种技术,提供源代码到构建后代码的映射。(如果构建后代码出错了,通过映射关系,可以追踪到源代码错误)

生产环境webpack缓存

hash: 每个文件都生成自己的hash
chunkhash: 每个代码块都生成一个hash
contenthash: 每个资源都会生成自己hash 如果js资源改变只生成js资源的hash 不会影响css资源。这个是webpack缓存的主要实现方式。

tree shaking

主要是用来剔除无用的资源,没有用到的代码 减少打包体积
条件 production es6模块化
在package.json中

  • sideEffects: false 代表所有代码都没有副作用 都可以进行tree shaking 会把css干掉
  • sideEffects: [".css", ".less"]

code split 代码分割

主要研究js代码的代码分割

1.根据入口文件代码分割

{
  // 多入口代码分割 可以进行多页面应用
  entry: {
    main: './src/js/index.js',
    test: './scr/js/test.js',
  }
}

2.optimization分割

webpack配置如下代码,主要用于将node_modules中的代码单独打包成1个chunk 最终输出
将别人的第三方的东西拿出来单独打包
而且会分析多入口文件中有没有公共的依赖,如果有,会打包成单独的一个chunk

optimization: {
  splitChunks: {
    chunks: 'all'
  }
}

3.import()函数代码分割

懒加载 预加载

懒加载

一般用import()函数进行懒加载 事件中加载,then方法再处理逻辑

document.getElementById("btn").onclick = function() {
  // 懒加载
  import(/* webpackChunkName: 'test' */'./test').then((mul) => {
    console.log(mul(4, 5))
  })
}

预加载

webpackPrefetch: true 预加载

document.getElementById("btn").onclick = function() {
  // 懒加载
  import(/* webpackChunkName: 'test', webpackPrefetch: true */'./test').then((mul) => {
    console.log(mul(4, 5))
  })
}

PWA 渐进式网络开发

利用workbox
webpack中利用workbox-webpack-plugin

const workboxWebpackPlugin = require('workbox-webpack-plugin')

new workboxWebpackPlugin.GenerateSW({
  clientsClaim: true, // 帮助serviceworker快速启动 删除旧的serviceworker
  skipWaiting: true // 跳过等待
})

判断serviceworker是否可用

// 在项目入口
if ('serviceworker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceworker.register('/service-worker.js').then(() => {
      console.log('注册成功');
    }).catch(
      console.log('注册失败');
    )
  })
}

多进程打包

webpack4 用 thread-loader
webpack5不用这样

externals 防止某些依赖打包进我们的项目

比如jquery 我们需要用cdn 就用webpack的externals属性来让其不打包进项目

{
  externals: {
    jquery: 'jQuery'
  }
}

dll 动态连接库

会告知webpack哪些库是不需要打包的,单独弄出来打包成另外的资源。

你可能感兴趣的:(webpack 性能优化)