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分析出依赖关系
webpack优化的更多相关文章
- webpack快速入门——实战技巧:webpack优化黑技能
1.抽离jquery,vue(多个第三方类库抽离) 修改入口文件(webpack.config.js中) entry: { entry: './src/entry.js', jquery:'jquer ...
- 浅谈webpack优化
webpack优化方案 1. 优化开发体验 1-1. 加快构建速度 ① 缩小文件搜索范围 由于 Loader 对文件的转换操作很耗时,需要让尽可能少的文件被 Loader 处理,用include和ex ...
- Webpack学习笔记九 webpack优化总结
webpack 优化笔记 webpack4 自带的优化包括 swingTree(摇摆树)和作用域提升 swingTree 比如入口文件 index.js引入通用方法 util, 里面有 10个方法, ...
- 浅探webpack优化
由于前端的快速发展,相关工具的发展速度也是相当迅猛,各大框架例如vue,react都有自己优秀的脚手架工具来帮助我们快速启动一个新项目,也正式因为这个原因,我们对于脚手架中最关键的一环webpack相 ...
- 常用的webpack优化方法
1. 前言 关于webpack,相信现在的前端开发人员一定不会陌生,因为它已经成为前端开发人员必不可少的一项技能,它的官方介绍如下: webpack 是一个模块打包器.webpack的主要目标是将 J ...
- webpack优化之玩转代码分割和公共代码提取
前言 开发多页应用的时候,如果不对webpack打包进行优化,当某个模块被多个入口模块引用时,它就会被打包多次(在最终打包出来的某几个文件里,它们都会有一份相同的代码).当项目业务越来越复杂,打包出来 ...
- webpack优化 -- compression-webpack-plugin 开启gzip
webpack优化 -- compression-webpack-plugin 开启gzip 打包的时候开启gzip可以大大减少体积,非常适合于上线部署.下面以vue-cli2.x项目为例,介绍如何在 ...
- webpack优化 -- happypack
webpack优化 -- happypack 前言:happypack是一个可以开启多线程转换loader的插件,可以在开发环境下提高编译速度,下面用vue-cli 2.x配合happypack优化一 ...
- 记一次真实的webpack优化经历
前言 公司目前现有的一款产品是使用vue v2.0框架实现的,配套的打包工具为webpack v3.0.整个项目大概有80多个vue文件,也算不上什么大型项目. 只不过每次头疼的就是打包所耗费的时间平 ...
- 如何使用webpack优化首屏渲染时间
其实说到性能优化,他的范围太广了,今天我们就只聊一聊通过webpack配置减少http请求数量这个点吧. 简单说下工作中遇到的问题吧,我们做的一个项目中首页用了十多张图片,每张图片都是一个静态资源,所 ...
随机推荐
- Python-函数小结
原文出处,如有侵权,请联系删除. 用户自定义.py文件 如果你已经把my_abs()的函数定义保存为abstest.py文件了,那么,可以在该文件的当前目录下启动Python解释器,用from abs ...
- Java版 人脸识别SDK demo
虹软人脸识别SDK之Java版,支持SDK 1.1+,以及当前最新版本2.0,滴滴,抓紧上车! 前言 由于业务需求,最近跟人脸识别杠上了,本以为虹软提供的SDK是那种面向开发语言的,结果是一堆dll· ...
- promise原理
简介 Promise 对象用于延迟(deferred) 计算和异步(asynchronous )计算.一个Promise对象代表着一个还未完成,但预期将来会完成的操作.Promise 对象是一个返 ...
- jsp页面中include静态html出现乱码问题的解决方式
这个问题出现过两次,上次没有做好记录,今天又出现了.不过这两次的情景也不完全一致. 今天通过搜索找到这篇文章的解决方式很好,可供参考.原博客地址http://blog.csdn.net/izgnaw/ ...
- 关于ORACLE数据库名以及数据实例名等几个重要概念
在Oracle中有关数据库和数据库实例的几个重要概念,有时候如果理解不是很深或者对其疏忽.混淆了,还真容易搞错或弄不清其概念,下面就数据库实例名.数据库名.数据库域名.数据库服务名.全局数据库名几个概 ...
- vuex直接修改state 与 用dispatch/commit来修改state的差异
一. 使用vuex修改state时,有两种方式: 1.可以直接使用 this.$store.state.变量 = xxx; 2.this.$store.dispatch(actionType, pay ...
- “Axure”介绍
一. Axure RP简介: Axure RP 能帮助网站需求设计者,快捷而简便的创建基于网站构架图的带注释页面示意图.操作流程图.以及交互设计,并可自动生成用于演示的网页文件和规格文件,以提供演示与 ...
- js数组中随机选取一个数值!!
var arr = ["太阳光大","成功是优点的发挥","不要小看自己", "口说好话","手心向下是助人& ...
- HashMap源码分析(基于jdk8)
我们知道在jdk7中HashMap的实现方式是数组+链表.而在jdk8中,实现有所变化,使用的是数组+链表+红黑树实现的. 当链表长度达到8时转化为红黑树. static final int TREE ...
- flutter Provide 状态管理篇
Provide是Google官方推出的状态管理模式.官方地址为: https://github.com/google/flutter-provide 现在Flutter的状态管理方案很多,redux. ...