Vite性能优于webpack的原因解读

364 阅读2分钟

vite0.jpeg

什么是 Vite?

Vite是一种新型前端构建工具

想必大家都知道,Vite在大型项目开发模式下,打包速度远高于webpack

为什么Vite可以这么快呢?

Vite性能优势主要来自对打包流程进行了优化。

而这些优化有如下三点:

  • 快速冷启动

Vite只启动一台静态页面的服务器,不会打包全部项目文件代码,服务器根据客户端的请求加载不同的模块处理,实现按需加载。

vite2.png 而我们所熟知的webpack则是,一开始就将整个项目都打包一遍, 再开启dev-server 如果项目规模庞大,势必打包时长陡然剧增。

vite1.png

  • 打包编译速度

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 只需要在浏览器请求源码时进行转换并按需提供源码。根据情景动态导入代码,即只在当前屏幕上实际使用时才会被处理。

需要深入的课题: