注:总结自吴浩麟---《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. MongoDB学习(管理数据库和集合)

    管理数据库 显示数据库列表 show dbs 切换到其他数据库 use <database_name> 创建数据库 MongoDB没有提供显式的创建数据库的MongoDB shell命令. ...

  2. js 百度地图定位

    //百度 layer.msg('正在定位,请稍后'); var geolocation = new BMap.Geolocation({ enableHighAccuracy: true, //是否使 ...

  3. 利用data-src属性 更换图片

    <div class="img_src"> <img src="./images/luo.png"></div> <u ...

  4. 一个字符带下滑线的EditText

    效果样式: 这个比较特别的editText是公司的一个新的需求,我也是在网上找了一下,然后看到了一篇博客然后修改成自己需要的样式.这种一般的思路就是在onDraw()方法绘制editText的特别的样 ...

  5. simulink创建简单模型

    创建简单模型 您可以使用 Simulink® 对系统建模,然后仿真该系统的动态行为.Simulink 允许您创建模块图,图中的各个连接模块代表系统的各个部分,信号代表这些模块之间的输入/输出关系.Si ...

  6. rocketmq4.x快速入门指南

    以下采用的是apache rocketmq 4.2.0版本 相关文档如下 快速体验: http://blog.seoui.com/2018/07/24/rocketmqinstall/ rocketm ...

  7. oracle sql developer 出现 : 适配器无法建立连接问题解决方案 The Network Adapter could not establish the connection

    直接上图比较直观 tips one:先看看自己 控制台的 SQLplus 可以登录不 可以直接往下面走 ,如果不可以就现在服务里面找到 Oracle 开头的服务启动就好 实在不会可以百度 注:由于该步 ...

  8. [FTP]通过FileZilla在阿里云主机上搭建ftp服务器

    前一阵子租了一台服务器主机来玩,正好周末有时间研究了一下怎么搭建ftp server. 准备.首先要下载filezilla client和filezilla server, 下载地址: server: ...

  9. url获取整理

    $_SERVER['DOCUMENT_ROOT'];   //网站的根目录 echo $_SERVER['SERVER_NAME']; //当前的服务器域名 echo $_SERVER['HTTP_H ...

  10. Delphi 拦截输入法输入结果

    { 拦截输入法输入的字符串.向编辑框中输入中文查看效果. Delphi XE7 } unit Unit1; interface uses Winapi.Windows, Winapi.Messages ...