Vite与WebPack的对比,及解决了什么痛点,及什么是ESM?

news2024/11/14 1:13:07

一、简要

ESM,是指构成ESM规范的一系列的JavaScript特性或者API

1、首先要明确的是,Vite跟WebPack的优势只在开发环境。当把包部署到了生产环境后,大家都是一样的,甚至webpack的兼容性可能会更好。 这也是为什么有人提出,开发环境用Vite,打包时用webpack。

提问:为什么webpack的兼容性更好?

二、Vite 解决了 WebPack 的什么痛点 ?

1、冷启动时长(刚启动项目的时候)。我个人认为这是Vite解决了webpack的最大痛点,在项目非常大的时候,启动时间要等很久。 

   1.1为什么能比WebPack冷启动快很多? 

        Vite 通过在一开始将应用中的模块区分为 依赖 和 源码 两类,改进了开发服务器启动时间。

         1、使用了GO语言编写的esbuild 预构建工具 ,许多内部模块的 ESM 依赖项转换为单个模块。有些包将它们的 ES 模块构建为许多单独的文件 。

         2、Vite 以 原生 ESM 方式提供源码。这实际上是让浏览器接管了打包程序的部分工作:Vite 只需要在浏览器请求源码时进行转换并按需提供源码。根据情景动态导入代码,即只在当前屏幕上实际使用时才会被处理。

 简而言之: 使用了更好的预构建工具,最重要的是使用了原生的ESM来动态导入模块

tip: 跟下面的解释一样,纯纯是ESM厉害,webpack使用联邦模块一样做到了这样的动态导入。 

2、热更新时长。热更新差别不大,最新的webpack使用了联邦模块,既MSFU,热更新也是非常快。

   2.1、vite 为什么能 webpack 热更新更快? 

         这里标注一个词 动态模块热替换(HMR)。同时讲下热更新是如何实现的? 正常的更新都是重新编译整个项目,重新打包。但热更新是,哪个文件改变了,重新构建这个模块,同时原先的这个模块失活(断掉链接),webpack 通过联邦模块消费这个新的模块,Vite 在原生 ESM 上执行的,重新链接这个新的模块。

           1、Vite 的热更新模块是基于 ESM,纯纯是ESM 厉害。

           2、Vite 还利用了 HTTP 头来加速整个页面的重新加载。

源码模块的请求会根据 304 Not Modified 进行协商缓存,而依赖模块请求则会通过 Cache-Control: max-age=31536000,immutable 进行强缓存,因此一旦被缓存它们将不需要再次请求。

总结: Vite 比 Webpack 快,完全是因为ESM 。不管热更新还是冷启动,webpack都做了对应的优化,但就是比不过基于ESM做的优化。

ESM的来源与定义             

ESM是一种规范,这个规范里面包含有一些新的语法和概念,包括`import`和`export`关键字、模块作用域等,是在ES6引入,后逐渐被大部分浏览器所支持。所以,我们通常说的ESM,其实是指构成ESM规范的一系列的JavaScript特性或者API。

ESM(ECMAScript Modules)是一种在 JavaScript 中使用模块化编程的标准。浏览器支持 ESM 是通过实现 JavaScript 的内置模块系统来实现的。在支持 ESM 的浏览器中,可以使用`<script type="module">`标签来加载模块。当浏览器遇到该标签时,会将其内部的 JavaScript 代码视为一个模块并进行加载。在模块中,可以通过`import`语句引入其他模块,也可以通过`export`语句将模块中的内容暴露给其他模块使用。

支持 ESM 的浏览器使用了一种叫做“异步模块定义”(AMD)的技术。当浏览器遇到`<script type="module">`标签时,它会将该标签内部的 JavaScript 代码下载并解析,然后使用异步加载技术来加载该模块所依赖的其他模块。这样,当一个模块依赖的其他模块还没有加载完成时,浏览器就不会执行该模块的代码,从而避免了因为依赖关系而导致的代码执行错误。

总的来说,浏览器支持 ESM 是通过实现 JavaScript 的内置模块系统来实现的,并且使用了异步加载技术来解决模块之间的依赖关系。

ESM是在ECMAScript 6标准中被引入的,它通过`import`和`export`语法来实现模块化。在ES6之前,JavaScript本身并没有原生支持模块化,因此开发者们使用各种不同的模块加载器和打包工具来解决这个问题。为了实现ESM,在ES6标准制定时,JavaScript语言设计者们引入了一些新的语法和概念,包括`import`和`export`关键字、模块作用域等。同时,JavaScript运行时环境(如浏览器和Node.js)也需要升级以支持这些新特性。浏览器和Node.js的开发者们都在近年来逐步对ESM进行支持,使得JavaScript语言的模块化能力越来越强大。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图像描述算法排位赛:SceneXplain 与 MiniGPT4 谁将夺得桂冠?

如果你对图像描述算法的未来感到好奇&#xff0c;本场“图像描述算法排位赛”绝对是你不能错过的&#xff01;在这场较量中&#xff0c;SceneXplain 和 MiniGPT-4 将会比试&#xff0c;谁将摘得这场比赛的桂冠&#xff1f; 背景介绍 在上篇文章中&#xff0c;我们介绍了图像描述…

C++类与对象—上

本期我们来学习类与对象 目录 面向过程和面向对象初步认识 类的引入 访问限定符 类的定义 封装 类的作用域 类的实例化 this指针 C语言和C实现Stack的对比 面向过程和面向对象初步认识 C 语言是 面向过程 的&#xff0c; 关注 的是 过程 &#xff0c;分析出求解问题的…

研究生考试 之 计算机网络第七版(谢希仁) 第一章 课后答案

研究生考试 之 计算机网络第七版(谢希仁) 第一章 课后答案 目录 研究生考试 之 计算机网络第七版(谢希仁) 第一章 课后答案 一、简单介绍 二、计算机网络第七版(谢希仁) 第一章 课后答案 1、 计算机网络向用户可以提供哪些服务&#xff1f; 2、 试简述分组交换的要点。 3…

人工神经网络

&#x1f351; CV专栏 1. 单个神经元 &#x1f351; 神经网络 即 模型 &#x1f364; 输入 四个参数 --> 结果 &#x1f351; 模型训练(学习) 例子 &#x1f351; 模型的输入x 乘 权值ω 减去阈值θ --> 激活函数 f &#x1f351; 输出 yi &#xff08;向下传递 或 直…

一步步带你学习Python编程:从零开始的查缺补漏

在快节奏的生活中&#xff0c;很难找到时间来学习新的技能。但有时候&#xff0c;我们会突然发现自己有一些空闲时间&#xff0c;而又不想虚度光阴。无聊的时候&#xff0c;我们可以选择学习一项新技能来充实自己。最近&#xff0c;我就因为有些无聊&#xff0c;决定重新学习Py…

linux实现网络程序

1️⃣ 在linux下&#xff0c;通过套接字实现服务器和客户端的通信。 2️⃣ 实现单线程、多线程通信。或者实现线程池来通信。 3️⃣ 优化通信&#xff0c;增加守护进程。 有情提醒&#xff0c;类里面默认的函数是内联。内联函数在调用的地方展开&#xff0c;没有函数地址&…

【Springboot系列】Springboot整合Swagger3不简单

1、缘由 Swagger是一个根据代码注解生成接口文档的工具&#xff0c;减少和前端之间的沟通&#xff0c;前端同学看着文档就可以开发了&#xff0c;提升了效率&#xff0c;之前很少写swagger&#xff0c;这次自己动手写&#xff0c;还是有点麻烦&#xff0c;不怎么懂&#xff0c;…

外网SSH远程连接linux服务器「cpolar内网穿透」

文章目录 视频教程1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 转载自内网穿透工具的文章&#xff1a;无公网IP&#xff0c;SSH远程连接Linux CentOS服务器【内网穿透】 本次教程我们来实现如何在外公网环境下…

OpenGL入门教程之 纹理

引言 我们已经了解到&#xff0c;我们可以为每个顶点添加颜色来增加图形的细节&#xff0c;从而创建出有趣的图像。但是&#xff0c;如果想让图形看起来更真实&#xff0c;我们就必须有足够多的顶点&#xff0c;从而指定足够多的颜色。这将会产生很多额外开销&#xff0c;因为每…

【ArcGIS Pro二次开发】(23):用地编码和用地名称的规范性检查

在国空或村庄规划的编制过程中&#xff0c;随着规划用地的调整&#xff0c;经常会手动修改用地编码和用地名称&#xff0c;不可避免的会出现错误&#xff0c;如果单靠人工校对&#xff0c;累人又不能保证准确性。这个工具的目的就是检查用地编码和用地名称是否规范&#xff0c;…

最短路径Floyd与区间DP

floyd算法是求最短路径的算法&#xff0c;算法复杂度为n(o^3),其优点在于能够一次求解所有点到其他点的最短路径&#xff0c;不需要其他运算&#xff0c;使用二维数组存储。其三层循环自外向内分别为&#xff1a;中间点&#xff0c;起始点和终点。状态方程为&#xff1a; num[…

【社区图书馆】《网络工程师的Python之路:网络运维自动化实战(第2版)》

文章目录 图书前言图书简介图书作者、简介图书好评图书目录总结&#xff1a;本人选择此图书的意义 图书前言 光阴似箭&#xff0c;岁月如梭。转眼之间&#xff0c;距离本书最早的电子书出版已经过去了三年之久。承蒙广大读者的厚爱&#xff0c;电子书和第1版纸质书的发行量远远…

【云原生】Java 应用程序在 Kubernetes 上棘手的内存管理

文章目录 引言JVM 内存模型简介非 Heap 内存Heap 堆内存Kubernetes 内存管理JVM 和 Kubernetes场景 1 — Java Out Of Memory 错误场景 2 — Pod 超出内存 limit 限制场景 3 — Pod 超出节点的可用内存场景 4 — 参数配置良好&#xff0c;应用程序运行良好 结语 引言 如何结合…

PCIe-DMA多通道/高性能/超低延时/超低抖动视频采集显示V4L2驱动

1 介绍 基于PCI ExpressIntegrated Block&#xff0c;Multi-Channel PCIe QDMA Subsystem实现了使用DMA地址队列的独立多通道、高性能Continous或Scather GatherDMA&#xff0c;提供fifo/AXI4-Stream用户接口。 基于PCI ExpressIntegrated Block&#xff0c;Multi-Channel PCIe…

大型体检管理系统源码:适用于大中型医院或独立体检中心

一套专业的体检管理系统源码&#xff0c;是医院、体检中心等单位开展体检业务的得力助手。它将以往人工操作的健康体检过程所得到信息转换成全信息化的电脑管理&#xff0c;使体检过程更为流畅、更有条理&#xff0c;更加便于管理&#xff0c;从而实现体检业务管理的自动化、信…

2023年报考CSM敏捷教练认证好不好?含金量高吗?

CSM&#xff0c;Certified Scrum Master&#xff0c;是Scrum联盟发起的Scrum认证。帮助个人从自身、团队和组织层面&#xff0c;学习技能和工具来扩展实践的层面&#xff0c;帮助团队正确使用Scrum&#xff0c;从而提高项目整体成功的可能性。 认证收益 职业能力提升 推动企业…

AIGC技术周报|为文生图模型提供“参考”;交互式prompt系统:让文生图模型更懂你

AIGC通过借鉴现有的、人类创造的内容来快速完成内容创作。ChatGPT、Bard等AI聊天机器人以及DallE 2、Stable Diffusion等文生图模型都属于AIGC的典型案例。「AIGC技术周报」将为你带来最新的paper、博客等前瞻性研究。 交互式prompt系统&#xff1a;让文生图模型更懂你 文生图…

JVM性能监测工具-JConsole

JVM性能监测工具-JConsole JConsole工具是JDK自带的图形化性能监控工具。并通过JConsole工具&#xff0c; 可以查看Java应用程序的运行概况&#xff0c; 监控堆信息、 元空间使用情况及类的加载情况等。 JConsole程序在%JAVA_HOM E%/bin目录下 或者你可以直接在命令行对他进…

【Java代码】MP3、flac歌曲批量生成同名的“xxx.lrc”歌词文件导入索尼黑砖二代

目录 1、准备条件2、实现方式3、代码环境和maven依赖4、Java代码5、示例1结果6、示例2结果7、一个小问题8、“音乐标签”下载地址 1、准备条件 网易云下载的MP3、flac后缀的歌曲若干首&#xff08;ncm后缀的歌曲需要还原格式&#xff0c;不然会随着VIP过期而无法听&#xff09…

《CTFshow-Web入门》06. Web 51~60

Web 51~60 web51题解 web52知识点题解 web53知识点题解 web54知识点题解 web55知识点题解 web56知识点题解 web57知识点题解 web58知识点题解 web59题解 web60题解 ctf - web入门 web51 题解 相比上一题多过滤了 tac 命令。那换一个即可。 题解&#xff1a; url ?cnl<f…