webpack优化

注:总结自吴浩麟---《webpack深入浅出》第四章--优化

1.缩小文件的搜索范围

1.1 优化loader:module.rules中,使用test,include,exclude尽量准确地命中文件(夹)

1.2 优化resolve.extensions:后缀列表要尽可能小;频率高的文件后缀要放在前面;写代码时尽量带上后缀,可以避免寻找过程

1.3 优化module.noParse:让webpack忽略对jquery,chartJs等没采用模块化的文件的递归处理,提高构建性能

2.使用DllPlugin

原理:给web项目的构建接入动态链接库;包含了大量复用模块的动态链接库只需被编译一次,在之后的构建过程中,被动态链接库包含的模块将不会重新编译。

插件:webpack内置了对dll的支持,有两个内置插件:DllPlugin(用于打包出一个个dll文件),DllReferencePlugin(用于在配置文件中引入dll文件)

3.使用HappyPack

原理:将任务分解给多个子进程,并发执行,子进程处理完成后再将结果发生给主进程

4.使用ParallelUglifyPlugin

原理:开启多个子进程压缩代码

ParallelUglifyPlugin内置了UglifyJS和UglifyES,支持并行压缩ES6代码

5.使用自动刷新

webpack官方提供两大模块:webpack和webpack-dev-server

5.1 文件监听

文件监听是webpack提供的

前提webpack.config.js中开启watch:true;用watchOptions进行配置

watchOptions: {
  ignored: /node_modules/,
  // 监听到变化后等300ms,300ms内不在变化 再去执行动作
  aggregateTimeout: 300,
  // 每秒询问1000次
  poll: 1000
}

原理:定时获取某个文件的最后编辑时间并保存,如果发现当前获取的和上一次获取的最后编辑时间不一致,就认为该文件发生了变化;当发现某个文件变化是,并不会立刻告诉监听者,而是先缓存起来,等待一段时间(默认300ms,节流)如果不再继续变化,就一次性告诉监听者。

如何监听文件列表:从入口文件出发,递归解析出依赖文件,将这些依赖文件都加入监听列表中

优化:watchOptions.aggregateTimeout尽量大,watchOptions.poll尽量小;但会降低监听的灵敏度

5.2 自动刷新浏览器

webpack-dev-server负责刷新浏览器

原理:向开发网页代码中注入代理客户端代码,代理客户端向DevServer发起websocket连接

6.开启模块热替换

除了5中提到的刷新整个页面,devServer还支持模块热替换

优点:反应更快,等待时间更短;能保留当前网页的运行状态

开启命令:webpack-dev-server --hot

原理:插入代理客户端代码(多出了用于模块热替换的文件,比自动刷新的代理客户端代码更大),重新生成用于替换老模块的补丁文件

7.cdn加速

内容分发网络,将资源部署到各处,用户访问时获取最近节点的资源

8.tree-shaking

剔除用不上的死代码

前提:依赖于ES6模块化语法,可以让webpack简单分析出哪些export的代码被import了

9.CommonsChunkPlugin提取公共代码

10.分割多个chunk以按需加载

11.使用prepack

比较激进的做法:在编译阶段预先执行代码,得到执行结果,将结果输出以提升性能

12.开启Scope Hoisting(作用域提升)

原理:分析模块间的依赖关系,尽可能将打散的模块合并到一个函数中

前提:依赖于ES6模块化语法,可以让webpack分析出依赖关系

原文地址:https://www.cnblogs.com/dll-ft/p/10789548.html

时间: 2024-10-08 22:20:02

webpack优化的相关文章

浅谈webpack优化

webpack优化方案 1. 优化开发体验 1-1. 加快构建速度 ① 缩小文件搜索范围 由于 Loader 对文件的转换操作很耗时,需要让尽可能少的文件被 Loader 处理,用include和exclude去缩小: resolve.modules用于配置 Webpack 去哪些目录下寻找第三方模块:[path.resolve(__dirname, 'node_modules')](根目录下): resolve.mainFields用于配置第三方模块使用哪个入口文件:['mian']: res

webpack优化 -- happypack

webpack优化 -- happypack 前言:happypack是一个可以开启多线程转换loader的插件,可以在开发环境下提高编译速度,下面用vue-cli 2.x配合happypack优化一下vue项目.?? 步骤 下载安装happypack 在本文中,vue-cli是2.x版本的(不是3.0版本),webpack是3.6.0,happypack是最新的5.0.1. //安装 npm install happypack -D 改造webpack 找到build/webpack.base

如何使用webpack优化首屏渲染时间

其实说到性能优化,他的范围太广了,今天我们就只聊一聊通过webpack配置减少http请求数量这个点吧. 简单说下工作中遇到的问题吧,我们做的一个项目中首页用了十多张图片,每张图片都是一个静态资源,所以都会有http请求,为了减少请求,我们可以通过base64编码的方法来展示图片.webpack中有一个包叫做url-loader,他可以将html以及css中的图片打包成base64,但是js中如果有图片url并不能编译成功(后面我会说明),现附上两张图看下普通图片以及base64编码后的图片有啥

使用 webpack 优化资源

在前端应用的优化中,对加载资源的大小控制极其的重要,大多数时候我们能做的是在打包编译的过程对资源进行大小控制.拆分与复用.本片文章中主要是基于 webpack 打包,以 React.vue 等生态开发的单页面应用来举例说明如何从 webpack 打包的层面去处理资源以及缓存,其中主要我们需要做的是对 webpack 进行配置的优化,同时涉及少量的业务代码的更改. 同时对打包资源的分析可以使用 webpack-bundle-analyzer 插件,当然可选的分析插件还是很多的,在本文中主要以该插件

webpack优化之code splitting

作为当前风头正盛的打包工具,webpack风靡前端界.确实作为引领了一个时代的打包工具,很多方面都带来了颠覆性的改进,让我们更加的感受到自动化的快感.不过最为大家诟病的一点就是用起来太难了. 要想愉快的使用,要使用n多的配置项,究其原因在于文档的不够详细.本身默认集成的不足.也不能说这是缺点吧,更多的主动权放给用户就意味着配置工作量的增加,这里就不过多探讨了.当历尽千辛万苦,你的项目跑起来之后,可能会发现有一些不太美好的问题的出现,编译慢.打包文件大等.那么,我们还要花些时间来看看怎么优化相关配

create-react-app 打包后静态文件过大 webpack优化

在最近的项目里,页面和静态文件并不是很多的情况下,打包后发现产出的静态资源却很大. 1.关掉sourcemap 在config/webpack.config.js文件里,大概30几行的位置添加这样一句代码,这样做的作用是防止线上生成环境将源码一起打包部署. 2.将一些公共的库(比如antd)做一个缓存 splitChunks: { chunks: 'all', name: "vender", cacheGroups: { vender: { name: "vendor&quo

webpack之前端性能优化(史上最全,不断更新中。。。)

最近在用webpack优化首屏加载性能,通过几种插件之后我们上线前后的速度快了一倍,在此就简单的分享下吧,先上个优化前后首屏渲染的对比图. 可以看到总下载时间从3800ms缩短到1600ms. 我们在用webpack时一般都会选择多入口文件吧,为的就是将自己的源码跟第三方库代码分离.这是之前的代码, entry: { entry: './src/main.js', vendor: ['vue', 'vue-router', 'vuex', 'element-ui','echarts'] }, o

webpack打包优化

vue-cli3 webpack优化 . 开启Gzip压缩 vue.config.js webpack配置 安装包 npm install compression-webpack-plugin -D const CompressionWebpackPlugin = require('compression-webpack-plugin') module.exports = { configureWebpack: config => { // 开发环境不需要gzip if (process.env

彻底解决Webpack打包慢的问题

转载 这几天写腾讯实习生 Mini 项目的时候用上了 React 全家桶,当然同时引入了 Webpack 作为打包工具.但是开发过程中遇到一个很棘手的问题就是,React 加上 React-Router.superagent.eventproxy 这些第三方轮子一共有好几百个 module,Webpack 的打包速度极慢.这对于开发是非常不好的体验,同时效率也极低. 问题分析 我们先来看一下完全没有任何优化的时候,Webpack 的打包速度(使用了jsx和babel的loader).下面是我们的