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

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

说明

玩转 webpack 学习笔记



可选方案


  • thread-loader
  • parallel-webpack
  • HappyPack


932d0c4e54164717a3aa2ca6b8927d91.png

使用 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 工作流程:

1b1eed13107e4915bc626906deed8439.png



使用 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

242501cfe00c461abb142f260c8e94ce.png


安装

npm install --save-dev happypack


e94fd35f18c04c8d8be700f7d003bcbd.png


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


d84efe60cb9149b5beb993ebd562a0ea.png


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

e877f415fb0943dbae953c830687d72f.png


接下来使用 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']
  })
];

0fb69edebeba4e6584415e0cbff04364.png

d61f592ca307441fbf785690044b4e9a.png


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

75401b438aa346589683d097405a66f5.png


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

bf08d6b6b59943d2a515a3d5b5cefbc5.png



实战使用 thread-loader


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

npm install --save-dev thread-loader


109c0d3100874f3ebc222f9c0d0ef249.png

55f18b642eb6422d8d901b5118036714.png

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


637e8ea2ab3a4a86a2de77b7a439ebd9.png


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


3294cbf411b541e08b6fa9d28e43965c.png




目录
相关文章
|
7天前
|
SQL 分布式计算 监控
Sqoop数据迁移工具使用与优化技巧:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入解析Sqoop的使用、优化及面试策略。内容涵盖Sqoop基础,包括安装配置、命令行操作、与Hadoop生态集成和连接器配置。讨论数据迁移优化技巧,如数据切分、压缩编码、转换过滤及性能监控。此外,还涉及面试中对Sqoop与其他ETL工具的对比、实际项目挑战及未来发展趋势的讨论。通过代码示例展示了从MySQL到HDFS的数据迁移。本文旨在帮助读者在面试中展现Sqoop技术实力。
21 2
|
1天前
|
调度 Python
Python多线程、多进程与协程面试题解析
【4月更文挑战第14天】Python并发编程涉及多线程、多进程和协程。面试中,对这些概念的理解和应用是评估候选人的重要标准。本文介绍了它们的基础知识、常见问题和应对策略。多线程在同一进程中并发执行,多进程通过进程间通信实现并发,协程则使用`asyncio`进行轻量级线程控制。面试常遇到的问题包括并发并行混淆、GIL影响多线程性能、进程间通信不当和协程异步IO理解不清。要掌握并发模型,需明确其适用场景,理解GIL、进程间通信和协程调度机制。
13 0
|
14天前
|
负载均衡 算法 Linux
深度解析:Linux内核调度器的演变与优化策略
【4月更文挑战第5天】 在本文中,我们将深入探讨Linux操作系统的核心组成部分——内核调度器。文章将首先回顾Linux内核调度器的发展历程,从早期的简单轮转调度(Round Robin)到现代的完全公平调度器(Completely Fair Scheduler, CFS)。接着,分析当前CFS面临的挑战以及社区提出的各种优化方案,最后提出未来可能的发展趋势和研究方向。通过本文,读者将对Linux调度器的原理、实现及其优化有一个全面的认识。
|
23天前
|
负载均衡 网络协议 中间件
掌握 SOME/IP :访问进程数据 构建高效通信系统的关键技术
掌握 SOME/IP :访问进程数据 构建高效通信系统的关键技术
63 1
|
25天前
|
运维 Linux Apache
LAMP架构调优(十)——Apache禁止指定目录PHP解析与错误页面优化
LAMP架构调优(十)——Apache禁止指定目录PHP解析与错误页面优化
197 2
|
28天前
|
存储 安全 程序员
【C++ 包装器类 智能指针】完全教程:std::unique_ptr、std::shared_ptr、std::weak_ptr的用法解析与优化 — 初学者至进阶指南
【C++ 包装器类 智能指针】完全教程:std::unique_ptr、std::shared_ptr、std::weak_ptr的用法解析与优化 — 初学者至进阶指南
66 0
|
1月前
|
机器学习/深度学习 监控 算法
【数学建模竞赛】优化类赛题常用算法解析
【数学建模竞赛】优化类赛题常用算法解析
37 2
|
2月前
|
缓存 前端开发 JavaScript
前端性能优化实践与原理解析
【2月更文挑战第3天】 在当今互联网时代,前端性能优化已经成为了开发人员必须要面对的重要课题。本文将结合实际案例,探讨前端性能优化的一些实践方法,并深入分析其背后的原理,旨在帮助开发者更好地理解和应用前端性能优化技术。
19 5
|
2月前
|
前端开发 JavaScript 开发者
深入理解前端性能优化中的Webpack Tree Shaking
【2月更文挑战第2天】在前端开发中,性能优化一直是开发者们不断追求的目标之一。而在这个过程中,Webpack Tree Shaking 技术作为一种重要的优化手段,对于减小前端应用的体积、提高加载速度起到了至关重要的作用。本文将深入探讨Webpack Tree Shaking 技术的原理和实现方式,帮助读者更好地理解并运用这一技术来优化前端应用性能。
|
2月前
|
并行计算 API 计算机视觉
Python多线程与多进程:概念、区别及应用场景解析
Python多线程与多进程:概念、区别及应用场景解析

推荐镜像

更多