面试常问:为什么 Vite 速度比 Webpack 快

 前言

最近作者在学习 webpack 相关的知识,之前一直对这个问题不是特别了解,甚至讲不出个123....,这个问题在面试中也是常见的,作者在学习的过程当中总结了以下几点,在这里分享给大家看一下,当然最重要的是要理解,这样回答的时候就不用死记硬背了。

原因

1、开发模式的差异

在开发环境中,Webpack 是先打包再启动开发服务器,而 Vite 则是直接启动,然后再按需编译依赖文件。(大家可以启动项目后检查源码 Sources 那里看到)

这意味着,当使用 Webpack 时,所有的模块都需要在开发前进行打包,这会增加启动时间和构建时间。

Vite 则采用了不同的策略,它会在请求模块时再进行实时编译,这种按需动态编译的模式极大地缩短了编译时间,特别是在大型项目中,文件数量众多,Vite 的优势更为明显。

Webpack启动

Vite启动

2、对ES Modules的支持

现代浏览器本身就支持 ES Modules,会主动发起请求去获取所需文件。Vite充分利用了这一点,将开发环境下的模块文件直接作为浏览器要执行的文件,而不是像 Webpack 那样先打包,再交给浏览器执行。这种方式减少了中间环节,提高了效率。

什么是ES Modules?

通过使用 exportimport 语句,ES Modules 允许在浏览器端导入和导出模块。

当使用 ES Modules 进行开发时,开发者实际上是在构建一个依赖关系图,不同依赖项之间通过导入语句进行关联。

主流浏览器(除IE外)均支持ES Modules,并且可以通过在 script 标签中设置 type="module"来加载模块。默认情况下,模块会延迟加载,执行时机在文档解析之后,触发DOMContentLoaded事件前。

3、底层语言的差异

Webpack 是基于 Node.js 构建的,而 Vite 则是基于 esbuild 进行预构建依赖。esbuild 是采用 Go 语言编写的,Go 语言是纳秒级别的,而 Node.js 是毫秒级别的。因此,Vite 在打包速度上相比Webpack 有 10-100 倍的提升。

什么是预构建依赖?

预构建依赖通常指的是在项目启动或构建之前,对项目中所需的依赖项进行预先的处理或构建。这样做的好处在于,当项目实际运行时,可以直接使用这些已经预构建好的依赖,而无需再进行实时的编译或构建,从而提高了应用程序的运行速度和效率。

4、热更新的处理

在 Webpack 中,当一个模块或其依赖的模块内容改变时,需要重新编译这些模块。

而在 Vite 中,当某个模块内容改变时,只需要让浏览器重新请求该模块即可,这大大减少了热更新的时间。

总结

总的来说,Vite 之所以比 Webpack 快,主要是因为它采用了不同的开发模式充分利用了现代浏览器的 ES Modules 支持使用了更高效的底层语言并优化了热更新的处理。这些特点使得 Vite在大型项目中具有显著的优势,能够快速启动和构建,提高开发效率。

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

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

相关文章

什么是Java语言的反射机制?

什么是反射 反射(Reflection)主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。(就像照镜子反射一样) Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法&…

docker -compose运行时端口被占用异常

解决方法:在docker-compose.yml文件中去掉端口的配置(去掉下图圈住部分),我们要启动5个,配置了端口我们只能启动一个,所以就会报错

Android Studio实现内容丰富的安卓教学学习平台

获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 项目编号088 1.开发环境 android stuido3.6 jak1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.查看教学视频资料 3.播放教学视频 4.浏览作业&#…

超清gif怎么制作?教你制作gif动图的小窍门

Gif动画作为当下非常受欢迎的一种图片格式,在各种社交软件中也经常的常见。而制作gif动图也没有大家想象的那么难,只需要使用gif动态图片制作(https://www.gif.cn/)工具,不用下载软件。上传jpg、png格式的图片&#xf…

奶瓶哪个品牌质量比较好?五大热销奶瓶实力全解析

相信每个宝妈宝爸在选奶瓶的时候都犹豫住了,市面上的款式和品牌五花八门,完全不知道怎么选。而且还有很多商家为了减少成本花销,开始采用大量不耐高温、不防腐蚀的材料进行加工,如果选到这种没有经过优化过的产品带回家&#xff0…

AcWing 796. 子矩阵的和

这个题的重点是仿照一维的数组,所以a[N][N]也是从1索引开始的。画个图举个例子就非常清晰了 之所以不好理解是因为没画格子,一个格子代表一个点,就很好理解了。 java代码: import java.io.*; public class Main{static int N 1…

C语言经典算法-5

文章目录 其他经典例题跳转链接26.约瑟夫问题(Josephus Problem)27.排列组合28.格雷码(Gray Code)29.产生可能的集合30.m元素集合的n个元素子集 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三角形 4. …

如何在 Postman 中执行断言测试?

在当今的软件构建流程中,应用程序编程接口,简称 API,起到了不可或缺的作用,它们使得不同的软件应用能够互相沟通和交换数据。随着应用程序的不断演进变得越发复杂,保障API的可靠性及其稳定性显得格外关键。正因如此&am…

【NLP】关于Transformer模型的一些认知

目录 一. Transformer模型简介 二. Transformer模型的架构 1. 编码器: 2. 解码器: 三. Transformer模型中残差连接层的作用 四. Transformer模型中, 输入部分的位置编码(PisitionalEncoding)矩阵为什么要使用三角函数对奇数…

人脸聚类原理和算法解释

人脸聚类是指将大量人脸图像根据它们的相似性分组到不同的群集中的过程。人脸聚类通常利用人脸的特征向量表示来度量人脸之间的相似性,并将相似的人脸图像聚集在一起。 以下是人脸聚类的一般原理: 人脸特征提取:对每张人脸图像提取特征向量。…

美摄科技剪同款SDK解决方案全面升级

视频内容已成为企业宣传、品牌塑造和市场营销的重要载体。然而,如何快速、高效地制作出高质量的视频内容,成为摆在众多企业面前的一大难题。针对这一挑战,美摄科技凭借深厚的技术积累和创新能力,推出了全新的剪同款SDK解决方案&am…

亮数据Bright Data,跨境电商一站式解决方案

目录 一、跨境电商的瓶颈1、技术门槛2、语言问题3、网络稳定性4、验证码处理和自动识别5、数据安全6、法律法规 二、机不可失三、动态住宅代理1、网络代理2、动态住宅代理3、动态住宅代理的主要优点 四、动态住宅代理的使用场景五、如何使用亮数据动态代理1、开始使用2、添加新…

上海王梓标准件制造有限公司隆重参加上海紧固件专业展

随着全球工业制造业的高速发展,标准件行业做为基础部件的供应链环节越来越受到重视。标准件,这类微不足道的小零件,在维护工业世界的稳定和发展中是至关重要的。在这样一个紧要关头,上海王梓标准件制造有限公司(下称“…

Linux hook系统调用使你文件无法删除

文章目录 前言一、什么是hook技术二、Linux hook种类三、系统调用表hook3.1 查看删除文件用到系统调用3.2 获取系统调用函数3.3 编写hook函数3.4 替换hook函数3.5 测试 参考资料 前言 hook技术在Linux系统安全领域有着广泛的应用,例如通过hook技术可以劫持删除文件…

多源BFS - 01矩阵

LCR 107. 01 矩阵 到最近的0的距离,对每一个非0的位置进行搜索,找到最短的距离即可,但如果对每一个非0的点都进行一次搜索的话,肯定是会超时的。这里可以考虑,将所有0点想象成一个0点(超级0)。然后找到所有1点到超级0的…

第 6 章 ROS-URDF练习(自学二刷笔记)

重要参考: 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 6.3.4 URDF练习 需求描述: 创建一个四轮圆柱状机器人模型,机器人参数如下,底盘为圆柱…

腾讯云优惠券、代金券、折扣券领取方法及使用教程

腾讯云作为国内领先的云计算服务提供商,一直致力于为广大用户提供高效、稳定、安全的云服务。为了吸引用户上云,腾讯云经常推出各种优惠活动,其中就包括腾讯云优惠券。下面小编将详细介绍腾讯云优惠券的相关信息,包括种类、领取入…

链动3+1模式 全新升级 解决小号和断代问题!!!

随着数字经济的蓬勃发展,市场竞争愈演愈烈,传统的商业模式显得捉襟见肘,难以满足企业快速发展的需求。在这种背景下,一种创新的商业模式——“链动31”应运而生,以其独特的玩法和优势,引领着市场发展的新方…

Python面向对象三大特征(封装、继承、多态)

面向对象编程的三大特征:封装、继承和多态。 注意:在python面向对象编程中,子类对象可以传递给父类类型 一、封装 在Python中,封装是面向对象编程中的一种重要概念,它可以帮助我们实现数据隐藏、信息保护和代码复用。…

阻止默认行为 e.preventDefault()搭配passive:false才有效

正确情况 如果想阻止默认行为,那么 e.preventDefault()搭配passive:false才是正解 document.addEventListener(touchmove,(e)>{ e.preventDefault() console.log(123,123);},{passive:false}) 如果搭配 passive:false,则会报警告 e.preventDefault()搭配passive:true会报…