webpack学习指南(下)

webpack 热更新是如何实现的

Webpack 的热更新(Hot Module Replacement,简称 HMR)是一种实时更新应用程序代码的技术。在开发过程中,它可以帮助开发人员快速地看到他们所做的更改的效果,而无需手动刷新浏览器。

Webpack 的热更新实现主要依靠以下两个机制:

  1. Webpack Dev Server

Webpack Dev Server 是一个小型 Node.js Express 服务器,它运行在内存中,并且能够提供 Webpack 编译后的文件。Dev Server 会监听文件的变化,如果文件发生了变化,它会重新编译并刷新页面。这个机制保证了在开发过程中自动刷新页面的功能。

  1. Hot Module Replacement 插件

Hot Module Replacement (HMR) 插件是 Webpack 内置的插件之一,它允许在不刷新整个页面的情况下替换模块。当一个模块发生变化时,HMR 插件会通知 Webpack,Webpack 会重新打包该模块及其依赖的模块,并将新的模块发送给浏览器,然后浏览器通过 HMR 接口将新的模块插入到应用程序中。这个机制保证了在开发过程中只更新改变的模块,而不需要重新加载整个页面。

综上所述,Webpack 的热更新实现主要依靠 Webpack Dev Server 和 Hot Module Replacement 插件这两个机制。Dev Server 负责监听文件的变化并刷新页面,HMR 插件负责在模块发生变化时将新的模块更新到应用程序中。这使得开发人员可以快速看到他们所做的更改的效果,并且无需手动刷新浏览器。

webpack 层面如何实现性能优化

以下是几种实现 webpack 性能优化的方法:

  1. 减少编译时间
  • 使用缓存:使用 babel-loader 和 ts-loader 时可以开启缓存,减少重新编译的时间。
  • 减少 loader 数量:尽可能减少使用 loader 的数量,因为每个 loader 都会增加编译时间。
  • 使用多进程并发构建:通过 happyPack 或 thread-loader 等插件来实现。
  1. 减少打包体积
  • 按需加载:将代码分割成更小的块,并在需要时按需加载。可以使用动态导入语法、SplitChunksPlugin 插件等来实现。
  • 压缩代码:使用 UglifyJSPlugin 或 TerserPlugin 对代码进行压缩和混淆。
  • 移除未使用的代码:使用 tree shaking 可以检测和移除未使用的代码。
  1. 加快构建速度
  • 减少扫描范围:使用 resolve.alias 和 resolve.extensions 等选项来减少模块的扫描范围。
  • 提取公共代码:通过 SplitChunksPlugin 插件提取公共代码,减少重复打包的代码。
  • 使用 DllPlugin:使用该插件可以将不变的库代码打包成一个单独的文件,不需要每次都重新构建。
  1. 优化开发体验
  • 使用 DevServer:使用 webpack-dev-server 可以在本地启动一个服务器预览代码,同时支持自动刷新和热更新。
  • 使用 SourceMap:开启 SourceMap 可以将编译后的代码映射回原始代码,方便调试。
  • 优化日志输出:通过 stats 和 friendly-errors-webpack-plugin 等插件可以优化 webpack 的日志输出。

webpack 的 tree-shaking

Tree-shaking 是 webpack 中一个用于优化 JavaScript 代码的技术,它可以通过静态分析代码,识别并移除未被使用的代码,从而降低最终打包后的文件大小。

具体来说,webpack 会对代码进行静态分析,找出所有引用的模块及其依赖关系,形成一棵依赖树。然后,对于每个模块,webpack 会标记其中被实际使用的部分,并将其打包进最终的输出文件中,同时将未被使用的部分从输出文件中移除。这个过程就是 tree-shaking。

在实现上,webpack 使用 ES6 模块语法中的静态导入(import)和动态导入(import())来区分哪些代码是被使用的。对于静态导入的模块,webpack 可以在编译时就确定其依赖关系和引用情况;而对于动态导入的模块,则需要在运行时才能确定它们是否被使用。

需要注意的是,为了确保 tree-shaking 的有效性,代码必须满足一定的条件。其中最重要的条件是代码必须是“纯净”的,即不会产生副作用(比如修改全局变量、读写文件等)。只有满足这个条件,webpack 才能安全地移除未被使用的代码,不会影响到其他部分的代码逻辑。

webpack 的 scop hosting

Webpack 的 Scope Hosting 是一项优化技术,旨在减少 JavaScript 包的大小和运行时的开销。它通过静态分析模块依赖关系,将具有相同作用域的模块合并成一个模块,并移除不必要的变量声明和闭包。这样可以减少 JavaScript 文件的体积和加载时间,并提高应用程序的性能。

具体来说,Scope Hosting 的工作原理是,在打包过程中,Webpack 根据模块之间的依赖关系,将具有相同作用域的模块合并成一个单独的模块。这种方式可以消除重复的变量声明和函数定义,并且可以防止代码膨胀产生额外的闭包。这样会减少 JavaScript 文件的大小,加快应用程序的加载速度,并且在运行时执行更快。

需要注意的是,为了让 Scope Hosting 生效,需要将所有模块都采用 ES6 模块语法进行导入和导出。只有这样,Webpack 才能正确地识别模块之间的依赖关系,从而实现 Scope Hosting 优化。

webpack 的 dll

WebPack 的 DLL(Dynamic Link Library)是一种优化技术,它可以将经常使用的代码打包成单独的库文件,以便在构建时快速引用,从而提高应用程序的性能和构建速度。

具体来说,通过 DLL 技术,我们可以将公共的第三方库或者自己编写的代码打包为一个动态链接库(DLL),然后在应用程序的构建过程中,只需要引用此库文件,而不需要重新打包这些公共代码,从而避免了重复打包的时间和资源浪费。

使用 WebPack 的 DLL 技术,我们需要先创建一个 DLL 配置文件,其中包括要打包的模块和输出文件的路径等信息。然后,在应用程序的 Webpack 配置文件中,我们可以利用 DllReferencePlugin 插件引用这个 DLL 文件,从而实现对公共库代码的快速引用。

总之,通过 WebPack 的 DLL 技术,我们可以充分利用缓存机制,使得构建过程更加高效,并且在多个应用程序之间共享公共代码也更加方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/17507.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AWS入门】AWS Lamda

目录 创建一个Lamda函数用Lamda函数控制启停EC2实例创建一台EC2实例创建角色创建lamda函数 使用Amazon EventBridge计划启停实例创建EventBridge 用户往S3存储桶上传图片文件,触发Lambda函数,将图片压缩并上传至另一个存储桶创建两个存储桶通过Cloudform…

【SpringMVC】| SpringMVC执行流程原理 | 常用注解 剥析

MVC目录 一. 🦁 MVC模型二. 🦁 SpringMVC1. SpringMVC执行流程(重点)Ⅰ. SpringMVC四大组件Ⅱ. 执行流程 2. RequestMapping3. RequestParam4. ReuqestHeader & CookieValue5. RESTful风格支持Ⅰ. 传统 vs restfulⅡ. PathVar…

【网络技术】什么是CNI

序言 你只管努力,其他交给时间,时间会证明一切。 Never look back unless you are planning to go that way. 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记一级论点蓝色:用…

【应急响应】日志自动提取分析项目ELKLogkitLogonTracerAnolog等

日志自动提取-七牛Logkit&观星应急工具 1、七牛Logkit:(Windows&Linux&Mac等) https://github.com/qiniu/logkit/ 支持的数据源(各类日志,各个系统,各个应用等) File: 读取文件中的日志数据,包…

面了一个4年经验的测试工程师,自动化都不会也要15k,我也是醉了····

在深圳这家金融公司也待了几年,被别人面试过也面试过别人,大大小小的事情也见识不少,今天又是团面的一天, 一百多个人都聚集在一起,因为公司最近在谈项目出来面试就2个人,无奈又被叫到面试房间。 整个过程…

数说热点 | 跟着《长月烬明》起飞,今年各地文旅主打的就是一个听劝

近日,随着热播剧《长月烬明》的爆火,蚌埠、宣城、敦煌等多个与剧情梦幻联动的宝藏城市被带飞,各地热心网友也纷纷催促自家文旅局赶紧“蹭飞”,《长月烬明》以一己之力打造了影视文旅融合的新样板。 仙偶剧特效天花板,…

《互联网安全产品漏洞管理规定》

《网络产品安全漏洞管理规定》由工业和信息化部、国家互联网信息办公室、公安部联合印发,自2021年9月1日起施行。 该《规定》明确,任何组织或者个人不得利用网络产品安全漏洞从事危害网络安全的活动,不得非法收集、出售、发布网络产品安全漏洞…

Redis高频面试题,使用场景

一、缓存 1、什么是缓存穿透 ? 怎么解决 ? 缓存穿透 查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库。 解决 方案一:缓存空数据,查询返回的数据为空,仍把这个空结果进行…

【JavaEE】认识线程

目录 1、什么是线程 2、为什么引入线程 2.1、线程的优缺点 3、CPU的工作原理 4、线程和进程的关系 4.1、线程和进程的入口函数 4.2、线程独享的资源 1、什么是线程 一个进程中可以有一个或者多个线程,每个线程都是一个独立的执行流。多个线程之间,也…

3.rabbitMQ之发布确认高级和整合springboot(重要)找了很多博客整理出来的

1.极端情况下 rabbitMQ需要重启,导致消息投递失败(生产者发消息全部丢失)(交换机或者队列出问题) 生产者需要把数据放到缓存,用定时任务重新发送 解决方法: 0.必须配置文件写 spring.rabbitmq.publisher-confirm-typecorrelatedspring.rabbitmq.publisher-returnstruecorrelati…

Word Embedding

One-hot-encoding 缺点 1.向量维度和向量个数很大,假设有1w个token的话,向量个数和维度就都是1w 2. 语义相近的词的向量并不相似 Word Embedding 核心思想:可以通过上下文理解单词的语义 predection-based方法 使用前一个单词预测下一个…

【机器学习】信息量、香农熵、信息增益

这节可以搭配 【机器学习】Logistic回归(重新整理)信息量(信息)信息量公式的推理过程 香农熵信息增益 【机器学习】Logistic回归(重新整理) B站视频:“交叉熵”如何做损失函数?打包…

Linux一学就会——编写自己的shell

编写自己的shell 进程程序替换 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数 以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动 例程开始执行…

视觉震撼的数据可视化示例

众所周知,数据可以非常强大——当你真正理解它告诉你什么时。 数据和信息可视化(数据可视化或信息可视化)是对大量复杂的定量、定性数据、信息进行设计和创建易于沟通、易于理解的图形或视觉表示的实践,在静态、动态或交互式视觉项目的帮助下&#xff0…

存储网络架构——DAS、NAS、SAN、分布式组网架构

目录 DAS直连式存储 NAS网络附加存储 SAN存储 存储区域网络 分布式存储组网 DAS直连式存储 DAS遇到的挑战 NAS网络附加存储 向主机提供文件服务;文件系统由存储设备维护,用户访问文件系统,不直接访问底层存储 拥有所有主机上文件与底层存储空…

JS案例分析-某国际音x-tt-params参数分析

今天我们要分析的网站是:https://www.tiktok.com/selenagomez?langen,参数名字叫x-tt-params。 先来抓个包 这个接口是用户视频列表url,参数叫x-tt-params,该接口中还有其他参数像msToken,X-Bogus, _sig…

【51单片机】点亮一个LED灯(看开发板原理图十分重要)

🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【The Right Path】 🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🍔基础内容 &#x1f3f3…

项目集的定义及管理

一、什么是项目集 项目集是相互关联且被协调管理的项目、子项目集和项目集活动,以便获得分别管理所无法获 得的效益。 以项目集的形式管理项目、子项目集及项目集活动能确保项目集组件的战略和工作计划根据各组 件的成果做出相应调整,或者按照发起组织的…

洞车系统常见问题解决指南

洞车常见问题解决指南 1.研发脚本处理问题1.1 WMS出库单无法审核1.2 OMS入库单无法提交,提示更新中心库存失败1.3 当出现OMS下发成功WMS/TMS/DMS还没有任务的情况时处理方案1.4 调度波次生成或者添加任务系统异常1.5 东鹏出库单部分出库回传之后要求重传1.6 更新订单…

不会前端,怎么快速打造属于自己的个人博客?

个人博客 简介提前准备 一、初始化vuepress项目二、页面配置首页配置顶部配置顶部导航栏路由配置侧边导航栏配置 三、打包部署四、数据统计插槽自定义插槽配置整体结构页面效果 项目地址 简介 主要教大家如何快速搞一个属于自己的博客网站,特别是一些不怎么会前端的…