chst365's blog chst365's blog
首页
  • Git
  • 网络
  • 操作系统
  • 浏览器
  • webpack
  • JavaScript
  • TypeScript
  • 性能
  • 工程化
  • React
  • 编程题
  • React技术揭秘
  • 算法
  • Node
  • 编码解码
  • NodeJS系列
  • Linux系列
  • JavaScript系列
  • HTTP系列
  • GIT系列
  • ES6系列
  • 设计模式系列
  • CSS系列
  • 小程序系列
  • 数据结构与算法系列
  • React系列
  • Vue3系列
  • Vue系列
  • TypeScript系列
  • Webpack系列
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

chst365

DIV工程师
首页
  • Git
  • 网络
  • 操作系统
  • 浏览器
  • webpack
  • JavaScript
  • TypeScript
  • 性能
  • 工程化
  • React
  • 编程题
  • React技术揭秘
  • 算法
  • Node
  • 编码解码
  • NodeJS系列
  • Linux系列
  • JavaScript系列
  • HTTP系列
  • GIT系列
  • ES6系列
  • 设计模式系列
  • CSS系列
  • 小程序系列
  • 数据结构与算法系列
  • React系列
  • Vue3系列
  • Vue系列
  • TypeScript系列
  • Webpack系列
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 浏览器

  • webpack

    • 一、基础篇:webpack与构建发展简史
    • 二、基础篇:webpack 基础用法
    • 三、基础篇:webpack 进阶用法
    • 四、进阶篇:编写可维护的 webpack 构建配置
    • 五、进阶篇:webpack 构建速度和体积优化策略
      • 1. 初级分析:使用 webpack 内置的 stats
        • package.json 中使用 stats
        • Node.js 中使用
      • 2. 速度分析:使用 speed-measure-webpack-plugin
        • 速度分析插件作用
      • 3. webpack-bundle-analyzer 分析体积
        • 可以分析哪些问题
      • 4. 使用高版本的 webpack 和 Node
        • 使用高版本的 webpack 和 Node.js
        • 使用 Webpack4: 优化原因
      • 5.多进程多实例构建
        • 多进程/多实例构建:资源并行解析可选方案
        • 多进程/多实例:使用 HappyPack 解析资源
        • 多进程/多实例:使用 thread-loader 解析资源
      • 6. 多进程/多实例:并行压缩
        • 方法一:使用 parallel-uglify-plugin 插件
        • 方法二:uglifyjs-webpack-plugin 开启 parallel 参数
        • 方法三:terser-webpack-plugin 开启 parallel 参数
      • 7. 进一步分包:预编译资源模块
        • 分包:设置 Externals
        • 进一步分包:预编译资源模块
        • 使用 DLLPlugin 进行分包
        • 使用 DllReferencePlugin 引用 manifest.json
      • 8. 充分利用缓存提升二次构建速度
        • 缓存
  • TypeScript

  • 性能

  • 工程化

  • React

  • JavaScript

  • 编程题

  • React技术揭秘

  • 算法

  • 前端
  • webpack
chst365
2020-07-15
目录

五、进阶篇:webpack 构建速度和体积优化策略

# 五、进阶篇:webpack 构建速度和体积优化策略

# 1. 初级分析:使用 webpack 内置的 stats

# stats: 构建的统计信息

# package.json 中使用 stats

-w651

# Node.js 中使用

-w1287

# 2. 速度分析:使用 speed-measure-webpack-plugin

代码示例

const SpeedMeasurePlugin = require('speed-measure-webpack-plugin')

const smp = new SpeedMeasurePlugin()

const webpackConfig - smp.wrap({
    plugins: [
        new MyPlugin(),
        new MyOtherPlugin()
    ]
})
1
2
3
4
5
6
7
8
9
10

可以看到每个 loader 和插件执行耗时 -w546

# 速度分析插件作用

# 分析整个打包总耗时

# 每个插件和 loader 的耗时情况

# 3. webpack-bundle-analyzer 分析体积

代码示例

const BundleAnalyzerPlugin = require('webapck-bundle-analyzer').BundleAnalyzerPlugin

module.exports = {
    plugins: [
        new BundleAnalyzerPlugin()
    ]
}
1
2
3
4
5
6
7

构建完成后会在 8888 端口展示大小 -w669

# 可以分析哪些问题

# 依赖的第三方模块文件大小

# 业务里面的组件代码大小

# 4. 使用高版本的 webpack 和 Node

# 使用高版本的 webpack 和 Node.js

-w1236

# 使用 Webpack4: 优化原因

V8 带来的优化(for of 替代 forEach、Map 和 Set 替代 Object、includes 替代 indexOf) 默认使用更快的 md4 hash 算法 webpack AST 可以直接从 loader 传递给 AST,减少解析时间 使用字符串方法替代正则表达式 -w351

# 5.多进程多实例构建

# 多进程/多实例构建:资源并行解析可选方案

-w1046

# 多进程/多实例:使用 HappyPack 解析资源

原理:每次 webpack 解析一个模块,HappyPack 会将它及它的依赖分配给 worker 线程中

# 代码实例

exports.plugins = [
    new HappyPack({
        id: 'jsx',
        threads: 4,
        loaders: ['babel-loader']
    }),
    new HappyPack({
        id: 'styles',
        threads: 2,
        loaders: ['style-loader', 'css-loader', 'less-loader']
    })
]

1
2
3
4
5
6
7
8
9
10
11
12
13

-w557

# 多进程/多实例:使用 thread-loader 解析资源

原理:每次 webpack 解析一个模块, thread-loader 会将它及它的依赖分配给 worker 线程中 -w423

# 6. 多进程/多实例:并行压缩

# 方法一:使用 parallel-uglify-plugin 插件

-w705

# 方法二:uglifyjs-webpack-plugin 开启 parallel 参数

-w598

# 方法三:terser-webpack-plugin 开启 parallel 参数

-w557

# 7. 进一步分包:预编译资源模块

# 分包:设置 Externals

思路:将 react、react-dom 基础包通过 cdn 引入,不打入 bundle 中 方法:使用 html-webpack-externals-plugin -w783

# 进一步分包:预编译资源模块

思路:将 react、react-dom、redux、react-redux 基础包和业务基础包打包成一个文件 方法:使用 DLLPlugin 进行分包,DllReferencePlugin 对 manifest.json 引用

# 使用 DLLPlugin 进行分包

-w533

# 使用 DllReferencePlugin 引用 manifest.json

在 webpack.config.js 引入 -w565

引用效果 -w800

# 8. 充分利用缓存提升二次构建速度

# 缓存

# 目的:提升二次构建速度

# 缓存思路:

  • babel-loader 开启缓存
  • terser-webpack-plugin 开启缓存
  • 使用 cache-loader 或者 hard-soure-webpack-plugin
#工程化#webpack
上次更新: 2021/09/14, 14:08:34
四、进阶篇:编写可维护的 webpack 构建配置
一、类型基础

← 四、进阶篇:编写可维护的 webpack 构建配置 一、类型基础→

最近更新
01
面试官
03-27
02
this&指针&作用域&闭包
03-27
03
前端
03-27
更多文章>
Theme by Vdoing | Copyright © 2019-2025 chst365 | 豫ICP备17031889号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式