webpack前端性能优化- HappyPack多线程打包-打包速度提升n倍

本文主要是介绍webpack前端性能优化- HappyPack多线程打包-打包速度提升n倍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HappyPack

  • 由于运行在 Node.js 之上的 webpack 是单线程模型的,我们需要 webpack 能同一时间处理多个任务,发挥多核 CPU 电脑的威力

HappyPack 插件就能实现多线程打包,它把任务分解给多个子进程去并发的执行,子进程处理完后再把结果发送给主进程,来提升打包速度!


  • 线程和进程都可用于实现并发,一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线。

安装

yarn add happypack --dev
or
npm install --save-dev happypack

vue.config.js 引入

const path = require('path')
const HappyPack = require('happypack');
const os = require('os');
// 开辟一个线程池,拿到系统CPU的核数,happypack 将编译工作利用所有线程
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length });
// 开启多线程构建插件(若项目为webpack5构建可以不启用此配置)
const happypack = new HappyPack({id: 'happybabel',loaders: ['babel-loader'],threadPool: happyThreadPool
})
module.exports =  {*********其他配置configureWebpack:config => {return {plugins: [happypack]};},********其他配置
}

这样 Happypack 的使用就配置完了,运行或者build项目,可以看到控制台打印如下提示:

Building for production...Happy[happybabel]: Version: 5.0.1. Threads: 8 (shared pool)
Building for production...Happy[happybabel]: All set; signaling webpack to proceed.

说明配置生效了。


不同webpack版本下使用建议

webpack4及以上已经融合了多线程机制,因此happypack的作用不是很明显。如果你使用的版本是<4,那么还是可以继续使用HappyPack。在webpack4中有个thread-loader搭配使用,配置起来更简单,两种方式都可以试一下看看那种方案对你来说最优。

这篇关于webpack前端性能优化- HappyPack多线程打包-打包速度提升n倍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940531

相关文章

vue3中通过数据字典实现下拉选择框的组件封装

1.下拉选择框组件文件 <template><el-select v-model="model" :placeholder :disabled :clearable style="width: 100%; min-width: 200px"><el-option v-for="item in dataList" :key="item[props.value]" :label="item[prop

vue3配置element-plus时间选择器中文显示

修改main.js import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' // 引入中文包 import zhCn from "element-plus/es/locale/lang/zh-cn"; const app = createApp(App) app.use(ElementPlus,{

glob 在webpack中的使用。

glob 在webpack中对文件的路径处理非常之方便,比如当搭建多页面应用时就可以使用glob对页面需要打包文件的路径进行很好的处理。 官方文档地址 : https://www.npmjs.com/package/glob  我没有找到中文文档地址。经过一段时间的学习,本着互联网分享精神。我现将我学习思路以及想法记录如下,分享给大家,希望对大家有所帮助。 本文章 全部案例源码:http:/

Vue 插槽详解

Vue插槽,是学习vue中必不可少的一节,当初刚接触vue的时候,对这些掌握的一知半解,特别是作用域插槽一直没明白。 后面越来越发现插槽的好用。 分享一下插槽的一些知识吧。 分一下几点: 1、插槽内可以放置什么内容? 2、默认插槽 3、具名插槽 4、作用域插槽   一、插槽内容   一句话:插槽内可以是任意内容。    先看一下下面的代码:声明一个child-componen

vue自定义组件dialog

自定义组件  dialog.vue源码: <template>     <div class="dialog" v-show="showMask">         <div class="dialog-container">             <div class="dialog-title">{{title}}</div>             <div class="con

Vue自定义组件(简单实现一个自定义组件)

在用vue构建项目的过程中,我们有时会用到别人开发的组件如vue-router;使用他人组件的正常步骤如下: 1、命令行进行安装,执行install; 2、在vue项目中的入口文件main.js中,进行导入; 3、然后用Vue.use(plugin)引入该组件。 我们也可以创造属于自己的组件,具体步骤如下: 1、在components文件中创建test文件; 2、在test文件中,创建index

wenpack 打包库插件

1.webpack环境安装:      mkdir  large-number cd   large-number npm init -y npm i webpack webpack-cli -D   2. 创建webpack配置文件     webpack.config.js     创建src目录  创建src目录下 index.js 书写index.js内容 export

Android WebView加载 Vue 项目

1.允许 vue端使用 localStorage存储 需要在 android webview 中作如下设置 myWebView.setDefaultHandler(new DefaultHandler());myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//localStorage

Android webview 加载Vue elementUi 单页应用问题

问题描述:在webview 加载的Url 报错如下,而在chrome 浏览器则是正常的。 2019-11-05 09:16:44.323 29602-29602/com.ryx.jinjian.demo I/chromium: [INFO:CONSOLE(1)] "Uncaught ReferenceError: Notification is not defined", source: htt

ES6中的延展运算符,让你的代码更简化

先来一段代码 var params=[1,23,53,8,5] function getNumber(){    for(var i in arguments){    console.log(arguments[i]) } } getNumber(...params);//1,23,53,8,5 看了上面的代码,有没有对延展操作符有了一点基本的认识。下面我们来进一步的学习。 延展操作符