12个Webpack的优化项目的
Webpack 是目前前端开发最重要的构建工具。无论是自己的日常开发,还是准备面试,都应该掌握一些关于 Webpack 的优化技巧。
在这篇文章中,我将从三个方面分享一些我常用的技巧:
-
提高优化速度
-
压缩打包文件的大小
-
改善用户体验。
提高速度
01、线程加载器
多线程可以提高程序的效率,我们也可以在 Webpack 中使用。而thread-loader是一个可以在Webpack中启用多线程的加载器。
npm i thread-loader -D
-
{
-
test: /\.js$/,
-
use: [
-
'thread-loader',
-
'babel-loader'
-
],
-
}
02、缓存加载器
在我们的项目开发过程中,Webpack 需要多次构建项目。为了加快后续构建,我们可以使用缓存,与缓存相关的加载器是缓存加载器。
安装:npm i cache-loader -D
-
{
-
test: /\.js$/,
-
use: [
-
'cache-loader',
-
'thread-loader',
-
'babel-loader'
-
],
-
}
03、Hot update 热更新
当我们在项目中修改一个文件时,Webpack 默认会重新构建整个项目,但这并不是必须的。我们只需要重新编译这个文件,效率更高,这种策略称为Hot update。
Webpack 内置了Hot update插件,我们只需要在配置中开启Hot update即可。
-
// import webpack
-
const webpack = require('webpack');
-
{
-
plugins: [
-
new webpack.HotModuleReplacementPlugin()
-
],
-
devServer: {
-
hot: true
-
}
04、exclude & include
在我们的项目中,一些文件和文件夹永远不需要参与构建。所以我们可以在配置文件中指定这些文件,防止Webpack取回它们,从而提高编译效率。
当然,我们也可以指定一些文件需要编译。
exclude : 不需要编译的文件
include : 需要编译的文件
-
{
-
test: /\.js$/,
-
-
include: path.resolve(__dirname, '../src'),
-
-
exclude: /node_modules/,
-
use: [
-
'babel-loader'
-
]
-
}
减小打包文件的大小
05、缩小 CSS 代码
css-minimizer-webpack-plugin 可以压缩和去重 CSS 代码。
安装:npm i css-minimizer-webpack-plugin -D
配置:
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
-
optimization: {
-
minimizer: [
-
new CssMinimizerPlugin(),
-
],
-
}
06、缩小 JavaScript 代码
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
-
},
-
},
-
}),
-
],
-
}
07、tree-shaking
tree-shaking 就是:只编译实际用到的代码,不编译项目中没有用到的代码。
在 Webpack5 中,默认情况下会启用 tree-shaking。我们只需要确保在最终编译时使用生产模式。
-
module.exports = {
-
mode: 'production'
-
}
08、source-map
当我们的代码出现bug时,source-map可以帮助我们快速定位到源代码的位置。但是这个文件很大。
为了平衡性能和准确性,我们应该:在开发模式下生成更准确(但更大)的 source-map;在生产模式下生成更小(但不那么准确)的源映射。
开发模式:
module.exports = { mode: 'development', devtool: 'eval-cheap-module-source-map'}
生产模式:
-
module.exports = {
-
mode: 'production',
-
devtool: 'nosources-source-map'
-
}
09、Bundle Analyzer
我们可以使用 webpack-bundle-analyzer 来查看打包后的 bundle 文件的体积,然后进行相应的体积优化。
安装:npm i webpack-bundle-analyzer -D
-
const {
-
BundleAnalyzerPlugin
-
} = require('webpack-bundle-analyzer')
-
// config
-
plugins: [
-
new BundleAnalyzerPlugin(),
-
]
改善用户体验
10、模块延迟加载
如果模块没有延迟加载,整个项目的代码会被打包成一个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'),
-
},
-
]
11、压缩包
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
-
})
-
]
12、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]',
-
},
-
},
最后,我们可以通过以下这张思维导图来总结。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhiaegbh
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22