注:总结自吴浩麟---《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优化的更多相关文章

  1. webpack快速入门——实战技巧:webpack优化黑技能

    1.抽离jquery,vue(多个第三方类库抽离) 修改入口文件(webpack.config.js中) entry: { entry: './src/entry.js', jquery:'jquer ...

  2. 浅谈webpack优化

    webpack优化方案 1. 优化开发体验 1-1. 加快构建速度 ① 缩小文件搜索范围 由于 Loader 对文件的转换操作很耗时,需要让尽可能少的文件被 Loader 处理,用include和ex ...

  3. Webpack学习笔记九 webpack优化总结

    webpack 优化笔记 webpack4 自带的优化包括 swingTree(摇摆树)和作用域提升 swingTree 比如入口文件 index.js引入通用方法 util, 里面有 10个方法, ...

  4. 浅探webpack优化

    由于前端的快速发展,相关工具的发展速度也是相当迅猛,各大框架例如vue,react都有自己优秀的脚手架工具来帮助我们快速启动一个新项目,也正式因为这个原因,我们对于脚手架中最关键的一环webpack相 ...

  5. 常用的webpack优化方法

    1. 前言 关于webpack,相信现在的前端开发人员一定不会陌生,因为它已经成为前端开发人员必不可少的一项技能,它的官方介绍如下: webpack 是一个模块打包器.webpack的主要目标是将 J ...

  6. webpack优化之玩转代码分割和公共代码提取

    前言 开发多页应用的时候,如果不对webpack打包进行优化,当某个模块被多个入口模块引用时,它就会被打包多次(在最终打包出来的某几个文件里,它们都会有一份相同的代码).当项目业务越来越复杂,打包出来 ...

  7. webpack优化 -- compression-webpack-plugin 开启gzip

    webpack优化 -- compression-webpack-plugin 开启gzip 打包的时候开启gzip可以大大减少体积,非常适合于上线部署.下面以vue-cli2.x项目为例,介绍如何在 ...

  8. webpack优化 -- happypack

    webpack优化 -- happypack 前言:happypack是一个可以开启多线程转换loader的插件,可以在开发环境下提高编译速度,下面用vue-cli 2.x配合happypack优化一 ...

  9. 记一次真实的webpack优化经历

    前言 公司目前现有的一款产品是使用vue v2.0框架实现的,配套的打包工具为webpack v3.0.整个项目大概有80多个vue文件,也算不上什么大型项目. 只不过每次头疼的就是打包所耗费的时间平 ...

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

    其实说到性能优化,他的范围太广了,今天我们就只聊一聊通过webpack配置减少http请求数量这个点吧. 简单说下工作中遇到的问题吧,我们做的一个项目中首页用了十多张图片,每张图片都是一个静态资源,所 ...

随机推荐

  1. 好代码是管出来的——使用GitHub

    前面的文章介绍了Git的基本概念和用法,本文则是基于GitHub的一个实践介绍,主要内容有: GitHub简介 个人与组织 仓库的创建与维护 Fork与pull request 小结 GitHub简介 ...

  2. ChromeDriver截图

    一.NuGet安装Selenium.Chrome.WebDriver和Selenium.WebDriver 二.将packages\Selenium.Chrome.WebDriver.2.45\dri ...

  3. Java:全局变量(成员变量)与局部变量

    分类细则: 变量按作用范围划分分为全局变量(成员变量)和局部变量 成员变量按调用方式划分分为实例属性与类属性 (有关实例属性与类属性的介绍见另一博文https://blog.csdn.net/Drag ...

  4. MATLAB中“fitgmdist”的用法及其GMM聚类算法

    MATLAB中“fitgmdist”的用法及其GMM聚类算法 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 高斯混合模型的基本原理:聚类——GMM,MA ...

  5. Jenkins-2.154 windows平台部署 FAQ

    部署过程中遇到的问题及解决办法如下 1.如何将 Jenkins 汉化? 1.进入系统管理 -> 插件管理 -> 选中“可选插件” 标签 -> 在过滤条件中输入“local”进行查找插 ...

  6. SharpZipLib压缩解压的使用

    项目中使用 Velocity 将模板和生成的动态内容(HTML.XML等)合并保存到redis数据库中,考虑到压缩的文件容量会比较小,方便传输而且存储所使用的空间也会比较小,所以要压缩一下,读取的时候 ...

  7. Greedy分饼干

    分饼干:因为饼干大小和孩子的食欲度不一定是按大小顺序排列的,所以开始要排序一下,然后从最小的饼干依次从食欲小的孩子开始看,如果他愿意吃,就++,看下一个小孩子,这回拿的就是大一点的饼干了. Examp ...

  8. 证明与计算(2): 离散对数问题(Discrete logarithm Problem, DLP)

    离散对数问题,英文是Discrete logarithm Problem,有时候简写为Discrete log,该问题是十几个开放数学问题(Open Problems in Mathematics, ...

  9. 虚拟机网络连接方式导致的p地址为10.0.2.*的问题

    全世界都知道通过 ifconfig 命令查看本机ip地址,我当然希望安装的虚拟机和当前局域网的其他机器一样内网ip为192.168.1.*,如下图所示: 而当我执行该命令时,实际情况却是这样的: 解决 ...

  10. PHP 面试知识点整理归纳

    基础篇了解大部分数组处理函数 array_chunk — 将一个数组分割成多个    array_column — 返回数组中指定的一列    array_combine — 创建一个数组,用一个数组 ...