最全 webpak4.0 打包性能优化清单

webpack4.0如何进行打包优化?

无非是从两个角度进行优化,其一:优化打包速度,其二:优化打包体积,送你一份打包性能优化清单

1.使用loader的时候尽量指定exclude和inlucde来提高文件查找效率,避免不必要的查找,设置noParse参数

module: {
noParse: /jquery/, // 不去解析jquery中的依赖
rules:[
{
test: /\.js?$/,
use: [
{ loader: 'babel-loader' },
{
// 自定义的同步处理loader
loader: 'replaceLoader',
options: {
name: 'hellonew'
}
},
{
// 自定义的异步处理loader
loader: 'asyncReplaceLoader',
options: {
name: 'myloader'
}
}
],
exclude: ['/node_modules'],
include: [path.resolve(__dirname, '../src/asset/less/component/js')]
}
]
},

2.对css公共的模块进行分离

const CssMiniExtreactPlugin = require('mini-css-extract-plugin')
// postcss自动给css3加上前缀
module{
rules:[
{
test: /\.less?$/,
// loader的执行顺序,从下到上,从右到左
use: [
{
loader: CssMiniExtreactPlugin.loader,
options: {
publicPath: '../'
}
},
{
// css-loader
loader: 'css-loader',
options: {
importLoaders: 2 // import引入的less文件也执行less-loader
// modules: true
// minimize: true
}
},
'postcss-loader',
'less-loader'
]
}
]
}
plugins:[
new CssMiniExtreactPlugin({
filename: 'css/[name]_[contenthash].css',
chunkFilename: 'css/[name]_chunk_[contenthash].css'
}),
],
optimization: {
//拆分css,公共的使用过两次的chunk打包到common.css方便做缓存,单独的css每个页面打包一个针对当前的页面的css
splitChunks: {
name: true,
cacheGroups: {
// 打包公共的css
styles: {
name: 'common',
test: /\.less$/,
chunks: 'all',
enforce: true,
minChunks: 2
},
// 打包每个页面的css
fooStyles: {
name: 'index',
test: (m, c, entry = 'index') => m.constructor.name === 'CssModule' && recursiveIssuer(m) === entry,
chunks: 'all',
enforce: true
},
barStyles: {
name: 'detail',
test: (m, c, entry = 'detail') => m.constructor.name === 'CssModule' && recursiveIssuer(m) === entry,
chunks: 'all',
enforce: true
},
}
}
}
}

3.拆分js,将公共的js拆分方便把相同的内容缓存下来

// 配置splitChunks
optimization: {
splitChunks: {
name: true,
cacheGroups: {
vendors: {
chunks: 'async',
name: 'verdon',
test: /[\\/]node_modules[\\/]/,
priority: -20,
minSize: 0
// filename: '[name].js'
},
default: {
chunks: 'all',
name: 'common',
minChunks: 1,
test: /[\\/]node_modules[\\/]/, // 配置打包哪里的文件
priority: -10
// reuseExistingChunk: true
}
}
}
}

4.开启css,js和html压缩

//压缩css
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
plugins:[
new OptimizeCssAssetsWebpackPlugin()
]
//压缩js
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
optimization: {
minimizer: [
new UglifyJsPlugin({
cache: true,
parallel: true, // 并发压缩
sourceMap: true // 开启sourcemap
})
]
}
//压缩html
const HtmlWebpackPlugin = require('html-webpack-plugin')
plugins:[
new HtmlWebpackPlugin({
hash: true,
template: `./src/index.html`,
filename: `index.html`,
minify: {
collapseWhitespace: true //开启html压缩
}
})
]

5.使用tree shake把没有用到的js和css剔除掉

optimization: {
usedExports: true, // 使用tree shake
}
//需要在package.json里面设置“sideEffect”进行配合使用
"sideEffects": [
"*.css", //移出css
"@babel/polyfill" //移除掉@babel/polyfill
],

6.善用alias,resolve里面有一个alias的配置项目,能够让开发者指定一些模块的引用路径。

// 省略后缀
resolve: {
extensions: ['.js', '.vue', '.jsx', '.json'],
// 定义别名
alias: {
'@component': utils.resolve('../src/component')
}
},

7.使用prefetch预加载

// 异步加载
function dom() {
return import(/* webpackPrefetch:true */ 'lodash').then(({ default: _ }) => {
let div = $('<div>')
div.html(_.join(['webpack', 'is', 'so', 'easy'], '***'))
return div
})
}

8.使用懒加载

//配置babel
npm install @babel/plugin-syntax-dynamic-import -D
//.babelrc文件配置如下
{
"plugins": ["@babel/plugin-syntax-dynamic-import"]
}
//在项目中正常使用即可
const Foo = () => import('./Foo.vue')

9.使用DllPlugin使得第三方模块只打包分析一次

//生成一个webpack.dll.config.js文件,执行npm run dll
const utils = require('./utils')
const webpack = require('webpack')
module.exports = {
mode: 'production',
entry: {
jquery: ['jquery'],
lodash: ['lodash']
},
output: {
path: utils.resolve('../dll'),
filename: '[name].dll.js',
library: '[name]' // 将打包的dll文件暴露一个公共的变量
},
plugins: [
// 输出映射关系
new webpack.DllPlugin({
name: '[name]',
path: utils.resolve('../dll/[name].manifest.json')
})
]
}
//以下为webpack配置
new AddAssetWebpackPlugin({
filepath: utils.resolve('../dll/jquery.dll.js')
}),
new AddAssetWebpackPlugin({
filepath: utils.resolve('../dll/lodash.dll.js')
}),
new webpack.DllReferencePlugin({
manifest: utils.resolve('../dll/jquery.manifest.json')
}),
new webpack.DllReferencePlugin({
manifest: utils.resolve('../dll/lodash.manifest.json')
})

10.使用happyPack进行多线程打包,提升打包效率

//npm install happypack -D
const Happypack = require('happypack') // 多线程打包,提高打包速度
let os = require('os')
let happyThreadPool = Happypack.ThreadPool({ size: os.cpus().length }) //webpack.config.js配置
rules:[
{
test:/\.less?$/
use:['happypack/loader?id=css']
}
{
test: /\.js?$/,
use: ['Happypack/loader?id=js'],
}
]
plugins:[
new Happypack({
id:'css',
use:['style-loader','css-loader','less-loader'],
threadPool: happyThreadPool
}),
new Happypack({
id: 'js',
use: [
{ loader: 'babel-loader' },
{
loader: 'replaceLoader',
options: {
name: 'hellonew'
}
},
{
loader: 'asyncReplaceLoader',
options: {
name: 'wxl'
}
}
],
threadPool: happyThreadPool
})
]

11.对图片打包,适当采用base64位格式,如css sprite图片可以使用base64位格式

 rules:[
{
test: /\.(jpg|png|svg|gif)?$/,
use: {
// loader: 'file-loader',
loader: 'url-loader', // url-loader把图片打包成base64格式了
options: {
// placeholder
name: '[name]_[hash].[ext]',
outputPath: 'images/', // 将图片打包到指定的文件夹下
limit: 204800 // 小于限定尺寸图片就被打包到images目录下
}
}
}
]

12.合理使用devtool参数,开发环境不建议使用cheap-module-source-map

devtool: 'cheap-module-source-map',

13.使用image-webpack-loader压缩图片,适当设置压缩程度,以免造成图片失真

$ npm install image-webpack-loader --save-dev
{
loader: 'image-webpack-loader',
options: {
mozjpeg: {
progressive: true,
quality: 65
},
optipng: {
enabled: true
},
pngquant: {
quality: [0.65, 0.90],
speed: 4
},
gifsicle: {
interlaced: false
},
webp: {
quality: 75
}
}
}

最全 webpak4.0 打包性能优化清单的更多相关文章

  1. webpack 打包性能优化

    webpack 打包性能优化 开启多线程打包 thread-loader https://www.npmjs.com/package/thread-loader https://github.com/ ...

  2. webpack打包性能优化

    1. 使用 gzip 压缩打包后的 js 文件 这个方法优化浏览器下载时的文件大小(打包后的文件大小没有改变) webpack.config.prod.js 中 var CompressionWebp ...

  3. 深入浅出的webpack构建工具---tree shaking打包性能优化(十二)

    阅读目录 1. 什么是tree-shaking? 2. 在webpack中如何使用 tree-shaking 呢? 3. 使用webpack-deep-scope-plugin 优化 回到顶部 1. ...

  4. Spring Boot2.0之性能优化

    1.JVM参数调优   针对运行效果  吞吐量    初始堆内存与最大堆尽量相同   减少垃圾回收次数  2.扫包优化: 启动优化 默认Tomcat容器改为Undertow Tomcat的吞吐量500 ...

  5. Vue-cli3性能优化

    Vue-cli3.0的打包性能优化方案:https://juejin.im/post/5d42962be51d4561b84c00c3 提升90%加载速度——vuecli下的首屏性能优化:https: ...

  6. 前端性能优化的另一种方式——HTTP2.0

    最近在读一本书叫<web性能权威指南>谷歌公司高性能团队核心成员的权威之作. 一直听说HTTP2.0,对此也仅仅是耳闻,没有具体研读过,这次正好有两个篇章,分别讲HTTP1.1和HTTP2 ...

  7. 浅谈webpack4.0 性能优化(转)

    前言:在现实项目中,我们可能很少需要从头开始去配置一个webpack 项目,特别是webpack4.0发布以后,零配置启动一个项目成为一种标配.正因为零配置的webpack对项目本身提供的“打包”和“ ...

  8. 【Vuejs】335-(超全) Vue 项目性能优化实践指南

    点击上方"前端自习课"关注,学习起来~ 前言 Vue 框架通过数据双向绑定和虚拟 DOM 技术,帮我们处理了前端开发中最脏最累的 DOM 操作部分, 我们不再需要去考虑如何操作 D ...

  9. webpack4.0打包优化策略整理小结

    本文转载于:https://www.jb51.net/article/137449.htm 介绍了webpack4.0打包优化策略整理小结,分享给大家,具体如下: webapck4 新特性介绍-参考资 ...

随机推荐

  1. K8S+GitLab+.net core-自动化分布式部署-3

    K8S+GitLab-自动化分布式部署ASP.NET Core(三) 更新镜像版本并部署到K8S上   一.介绍 前一篇,介绍了ASP.NET Core部署到K8S上,下面介绍我们在发布新一版本中怎么 ...

  2. (CSDN迁移) JAVA多线程实现-实现Runnable接口

    实现Runnable接口  implements Runnable 重写run()方法 @Override public void run(){//TODO} 创建线程对象: Thread threa ...

  3. linux install jsoncpp0.5.0

    要安装jsoncpp,首先要下载好scons,再去安装jsoncpp scons下载地址:wget http://prdownloads.sourceforge.NET/scons/scons-2.2 ...

  4. 【插件】【idea】的Mybatis Plugin插件方便mapper接口方法和mapper XML文件之间来回切换

    效果 安装 这是2019.2版本的,旧版的有点不一样

  5. ThinkPHP3(命名空间、RBAC)

    命名空间 当开发大型项目的时候,可以会需要成千上万的文件 面向对象通过命名空间来解决这个问题的. PHP命名空间是PHP5.3以后才出现的. 命名空间中可以出现:类,函数,常量 只有const定义的常 ...

  6. 移动端1px边框解决方案

    在retina屏中,像素比为2(iPhone6/7/8)或3(iPhone6Plus/7Plus/8Plus),1px的边框看起来比真的1px更宽. 使用伪类加transform的方式 元素本身不定义 ...

  7. [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件

    nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...

  8. MySQL视图、触发器、事务、存储过程、内置函数、流程控制、索引

    一.视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图 create view tea ...

  9. 阿里云 轻量应用服务器 上传一个HTML文件或者jsp文件 通过外网IP访问

    我选择的是 宝塔Linux,现在就说一下如何往服务器里面传文件然后通过外网IP访问 1.打开宝塔Linux面板登录,安装tomcat,安装好后如图 2.点击tomcat有个文件标识处 3.出现如图 4 ...

  10. Visual Studio 2019激活

    Visual Studio 2019 Enterprise BF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 Professional NYWVH-HT ...