webpack优化篇(四十三):多进程/多实例构建:资源并行解析可选方案

Posted 凯小默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack优化篇(四十三):多进程/多实例构建:资源并行解析可选方案相关的知识,希望对你有一定的参考价值。

说明

玩转 webpack 学习笔记

可选方案

  • thread-loader
  • parallel-webpack
  • HappyPack

使用 HappyPack 解析资源

原理:每次 webapck 解析一个模块,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']
	)
]

HappyPack 工作流程:

使用 thread-loader 解析资源

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

module.exports = smp.wrap(
	entry: entry,
	output: 
		path: path.join(_ dirname, 'dist'),
		filename: '[name ]_[chunkhash:8].js'
	mode: 'production',
	module: 
		rules: [
			
				test: /.js$/,
				use: [
					
						loader: ' thread- loader',
						options: 
							workers: 3
						
					,
					' babel- loader',
					// 'eslint- loader'
				]
			,
		]
	

实战使用 happypack

https://github.com/amireh/happypack

安装

npm install --save-dev happypack

在使用之前我们先增加一些页面,提升效果更明显


然后在运行打包命令 npm run build

接下来使用 happypack

const HappyPack = require('happypack');
exports.module = 
  rules: [
    
      test: /.js$/,
      // 1) replace your original list of loaders with "happypack/loader":
      // loaders: [ 'babel-loader?presets[]=es2015' ],
      use: 'happypack/loader',
      include: [ /* ... */ ],
      exclude: [ /* ... */ ]
    
  ]
;

exports.plugins = [
  // 2) create the plugin:
  new HappyPack(
    // 3) re-add the loaders you replaced above in #1:
    loaders: ['babel-loader']
  )
];

然后在运行打包命令 npm run build,我们可以看到有 3 个线程

可以看到时间有了明显的下降

实战使用 thread-loader

注释掉 happypack 的代码,安装依赖:https://github.com/webpack-contrib/thread-loader

npm install --save-dev thread-loader


use: [
    
        loader: 'thread-loader',
        options: 
            workers: 3
        
    ,
    'babel-loader',
    // 'happypack/loader',
    // 'eslint-loader'
]


然后在运行打包命令 npm run build,我们发现时间也有了明显的下降,

以上是关于webpack优化篇(四十三):多进程/多实例构建:资源并行解析可选方案的主要内容,如果未能解决你的问题,请参考以下文章

webpack优化篇(四十七):缩小构建目标

优化 Webpack 的构建速度

优化 Webpack 的构建速度

webpack优化篇(四十六):充分利用缓存提升二次构建速度

webpack优化篇(四十二): 使用高版本的 webpack 和 Node.js

webpack 打包优化的四种方法(多进程打包,多进程压缩,资源 CDN,动态 polyfill)