为什么vite比webpack速度快
一. webpack为什么慢
主要是由于其内部的核心机制——bundle模式引发的
-
webpack
通过bundle
机制,将项目中各种类型的源文件转化供浏览器识别的js、css、img
等文件,建立源文件之间的依赖关系,将数量庞大的源文件合并为少量的几个输出文件。 -
bundle
工作机制的核心部分分为两块:构建模块依赖图 -module graph
和将module graph
分解为最终供浏览器使用的几个输出文件。 -
构建
module graph
的过程中,涉及到大量的文件IO
、文件transfrom
、文件parse
操作;以及分解module graph
的过程中,需要遍历module graph
、文件transform
、文件
IO
等。这些操作,往往需要消耗大量的时间,导致构建速度变得缓慢,所以项目规模越大,构建速度越是缓慢 -
开发模式下,
dev server
需要webpack
完成整个工作链路才可以启动成功,这就导致构建过程耗时越久,dev serve
r 启动越久 -
webpack
也做了大量的优化,如loader
的缓存功能、webpack5
的持久化缓存,但是核心工作机制不变,远远达不到vite
的速度
二.vite为什么快
主要两个方面:快速的冷启动和快速的热更新。vite借助了浏览器对ESM规范的支持,采取了与Webpack完全不同的unbundle机制
-
unbundle
机制,顾名思义,不需要做bundle
操作,即不需要构建、分解module graph
,源文件之间的依赖关系完全通过浏览器对ESM
规范的支持来解析。这就使得dev server
在.
启动过程中只需做一些初始化的工作,剩下的完全由浏览器支持。 -
浏览器发起请求以后,
dev server
端会通过middlewares
对请求做拦截,然后对源文件做resolve
、load
、transform
、parse
操作,然后再将转换以后的内容发送给浏览器。
三.unbundle机制核心
-
模块之间的依赖关系的解析由浏览器实现
-
文件的转换由
dev server
的middlewares
实现并做缓存 -
不对源文件做合并捆绑操作
四.vite缺点
unbundle
机制给 Vite
在dev server
方面获得巨大性能提升的同时,也带来一些负面影响,那就是首屏和懒加载性能的下降。
首屏
由于unbundle
机制,首屏期间需要额外做以下工作:
- 不对源文件做合并捆绑操作,导致大量的
http
请求; - dev server 运行期间对源文件做
resolve、load、transform、parse
操作; - 预构建、二次预构建操作也会阻塞首屏请求,直到预构建完成为止;
和Webpack
对比,Vite 把需要在dev server
启动过程中完成的工作,转移到了 dev server
响应浏览器请求的过程中,不可避免的导致首屏性能下降。
不过首屏性能差只发生在 dev server
启动以后第一次加载页面时发生。之后再reload
页面时,首屏性能会好很多。原因是dev server
会将之前已经完成转换的内容缓存起来。
懒加载
和首屏一样,由于unbundle
机制,动态加载的文件,需要做 resolve、load、transform、parse
操作,并且还有大量的http
请求,导致懒加载性能也受到影响。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?