什么是 Vite?
Vite是一种新型前端构建工具
想必大家都知道,Vite在大型项目开发模式下,打包速度远高于webpack
为什么Vite可以这么快呢?
Vite性能优势主要来自对打包流程进行了优化。
而这些优化有如下三点:
- 快速冷启动
Vite只启动一台静态页面的服务器,不会打包全部项目文件代码,服务器根据客户端的请求加载不同的模块处理,实现按需加载。
而我们所熟知的webpack则是,一开始就将整个项目都打包一遍, 再开启
dev-server
如果项目规模庞大,势必打包时长陡然剧增。
- 打包编译速度
Vite 使用 esbuild 预构建依赖。
而Esbuild 使用的是 Go
编写,比 js
编写的打包器预构建依赖快 10-100
倍。
- 热模块更新
对于热更新问题,vite 采用立即编译当前修改文件的办法。同时 结合vite 的缓存机制( http 缓存 => vite 内置缓存 ),加载更新后的文件内容。
让浏览器参与打包工作
开发服务器启动时间
大多开发都清楚,打包速度的快慢,从直观角度看,是对从执行
npm run start
开始,到最终console提示,打包完成并出现开发服务器url之后的这一整体流程所耗时长的感知。
那这段时长,我们可以称之为开发服务器启动时间
对模块分类处理
而上述的开发服务器启动时间
, 绝大部分都在对模块进行打包编译
Vite 通过在一开始将应用中的模块区分为 依赖
和 源码
两类,进一步缩短了开发服务器启动时间
-
依赖
Vite 使用 esbuild 预构建依赖。而Esbuild 使用的是 Go 编写,并且比以 JavaScript 编写的打包器预构建依赖快 10-100 倍。 -
源码
源码通常包含一些并非直接是 JavaScript 的文件,需要转换时常会被编辑。同时,并不是所有的源码都需要同时被加载(例如基于路由拆分的代码模块)。
Vite 以 原生ESM
方式提供源码。这实际上是让浏览器接管了打包程序的部分工作:Vite 只需要在浏览器请求源码时进行转换并按需提供源码。根据情景动态导入代码,即只在当前屏幕上实际使用时才会被处理。