首页 > 其他分享 >webpack性能优化有哪些方法?

webpack性能优化有哪些方法?

时间:2022-10-05 10:45:17浏览次数:58  
标签:文件 哪些 plugin loader webpack js 优化 加载

线程加载器

多线程可以提高程序运行效率,在webpack中使用thread-loader(一个启动多线程的加载器)

npm i thread-loader -D
配置

{
        test: /\.js$/,
        use: [
          'thread-loader',
          'babel-loader'
        ],
}

缓存加载器

在开发中需要多次构建项目,为了加快后续构建,可以使用缓存

npm i cache-loader -D
配置

{
        test: /\.js$/,
        use: [
          'cache-loader',
          'thread-loader',
          'babel-loader'
        ],
}

Hot update

当我们在项目中修改一个文件时,webpack会默认重新构建这个项目,但这并不是必须的,我们只需要重新编译该文件即可,这种策略为Hot update

webpack中内置了Hot update插件,我们开启即可

配置

// import webpack
const webpack = require('webpack');
{
  plugins: [
      new webpack.HotModuleReplacementPlugin()
  ],

  devServer: {
      hot: true
  }
}

exclude & include

在项目中有一些文件和文件夹永远不需要参与编译,我们可以指定这些文件,防止webpack取回他们,提高编译效率

也可以指定需要编译的文件

exclude : 不需要编译的文件

include : 需要编译的文件

配置

{
    test: /\.js$/,

    include: path.resolve(__dirname, '../src'),

    exclude: /node_modules/,
    use: [
        'babel-loader'
    ]
}

缩小css代码

css-minimizer-webpack-plugin 可以压缩和去重 CSS 代码

npm i css-minimizer-webpack-plugin -D
配置

const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
optimization: {
    minimizer: [
      new CssMinimizerPlugin(),
    ],
  }

缩小js代码

terser-webpack-plugin可以压缩和去重 JavaScript 代码

npm i terser-webpack-plugin -D

配置

const TerserPlugin = require('terser-webpack-plugin')
optimization: {
    minimizer: [
      new CssMinimizerPlugin(), 
      new TerserPlugin({
        terserOptions: {
          compress: {
            drop_console: true, // remove console statement
          },
        },
      }),
    ],
  }7、tree-shaking

tree-shaking

只编译项目中实际用到的代码,不编译没有用到的

webpack中默认是启用tree-shaking,我们只需要在最后编译时使用生产模式

module.exports = {
  mode: 'production'
}

source-map

当我们的代码中出现bug时,他可以帮助我们快速定位到出现bug的源码的位置;但是这个文件很大。

为了平衡性能和准确性,我们应该:在开发模式下生成更准确(但更大)的 source-map;在生产模式下生成更小(但不那么准确)的源映射。

开发模式

module.exports = {
  mode: 'development',
  devtool: 'eval-cheap-module-source-map'
}

生产模式

module.exports = {
  mode: 'production',
  devtool: 'nosources-source-map'
}

Bundel Analyzer

我们可以使用 webpack-bundle-analyzer 来查看打包后的 bundle 文件的体积,然后进行相应的体积优化。

npm i webpack-bundle-analyzer -D

配置

const {
  BundleAnalyzerPlugin
} = require('webpack-bundle-analyzer')
// config
plugins: [
    new BundleAnalyzerPlugin(),
]

模块延迟加载

如果没有模块延迟加载,整个项目会被打包成一个js文件,导致单个js文件体积很大,就会使得用户请求网页时,首屏加载时间长

使用模块加载延迟,会把大js文件分割成多个小的js文件,网页加载时按需加载,提高了首屏加载速度

要启用延迟加载,我们只需要编写如下代码:

// src/router/index.js
const routes = [
  {
    path: '/login',
    name: 'login',
    component: login
  },
  {
    path: '/home',
    name: 'home',
    // lazy-load
    component: () => import('../views/home/home.vue'),
  },
]

压缩包

Gzip是一种常用的文件压缩算法,可以提高传输效率。但是,此功能需要后端配合。

npm i compression-webpack-plugin -D
配置
const CompressionPlugin = require('compression-webpack-plugin')

// config
plugins: [

    // gzip
    new CompressionPlugin({
      algorithm: 'gzip',
      threshold: 10240,
      minRatio: 0.8
    })
  ]

base64

对于一些小图片,可以转成base64编码,这样可以减少用户的HTTP请求次数,提升用户体验。url-loader 在 webpack5 中已被弃用,我们可以使用 assets-module 代替。

{
   test: /\.(png|jpe?g|gif|svg|webp)$/,
   type: 'asset',
   parser: {
      // Conditions for converting to base64
      dataUrlCondition: {
         maxSize: 25 * 1024, // 25kb
      }
   },
   generator: {
    filename: 'images/[contenthash][ext][query]',
   },
},

 

 


标签:文件,哪些,plugin,loader,webpack,js,优化,加载
From: https://www.cnblogs.com/qianduan-Wu/p/16755187.html

相关文章

  • WebPack5 处理图片资源
    过去在Webpack4时,我们处理图片资源通过 file-loader 和 url-loader 进行处理现在Webpack5已经将两个Loader功能内置到Webpack里了,我们只需要简单配置即可处理......
  • 面试官:React怎么做性能优化
    前言最近一直在学习关于React方面的知识,并有幸正好得到一个机会将其用在了实际的项目中。所以我打算以博客的形式,将我在学习和开发(React)过程中遇到的问题记录下来。这两天......
  • 数据填报有什么用?数据填报系统具有哪些优势?_光点科技
    大部分数据填报都是终端用户,或者可以说是我们使用信息系统的业务人员,提供这样一个纯粹的HTML页面表结构设计、发布、管理和填报数据的页面、界面友好、简单易用的统计研究分......
  • 面试官:React怎么做性能优化
    前言最近一直在学习关于React方面的知识,并有幸正好得到一个机会将其用在了实际的项目中。所以我打算以博客的形式,将我在学习和开发(React)过程中遇到的问题记录下来。这两......
  • 原始递归函数及模拟运行的优化
    看到网上一个题目,证明x开y次方是原始递归函数(primitiverecursivefunction)。这个问题并不难,只要把x开y次方实现出来即可。于是,正好把《递归论》相关内容补一补。【......
  • 组合数,计算上的优化
    逆元的主要用处,当求a/b模p时,a与b过大,就可以用逆元,求出b的逆元,一般是pow(b,p-2),a/b及等于a*b逆。组合数使用了这一个特性,求出阶乘的逆1intfac[N]//表示阶乘;2int......
  • 编写webpack 插件
    Webpack插件为第三方开发者释放了Webpack的最大可能性。利用多级回调开发者可以把他们自己的需要的功能引入到Webpack里面来。Build插件比Buildloader更进一步。因为你需......
  • webpack详细配置解析
    阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过;如果你和十天前的我一样,对很多选项存在着疑惑,那......
  • webpack4-用之初体验,一起敲它十一遍
    众所周知,webpack进入第4个大版本已经有2个月的时间了,而且webpack团队升级更新的速度也是非常的惊人在写下如下内容的时候webpack已经出到了4.6的版本了,剑指5.0应该是指日可......
  • 我的NVIDIA开发者之旅——优化显卡性能
    在我们购买任何一样东西时都是更具需求而决定的,买电脑也是,有时是为了办公,就买轻薄本;有些是为了玩游戏,就买游戏本。不同的需求会导致我们购买电脑的硬件有所不同,玩游戏最看重......