为什么vite比webpack速度快?

60 阅读1分钟

从运行原理来看:

webpack会根据我们的配置文件中的入口文件,分析出项目所有依赖关系,然后打包一个文件,交给浏览器去加载渲染,项目越大,打包的东西越多,项目的启动时间越长。

vite利用了ES module的特性,在使用vite运行项目时,会使用esbuild进行预构建,将所有模块转换为es module,不需要对我们的整个项目进行编译打包,而是在浏览器需要加载某个模块时,拦截浏览器发出的请求,根据请求进行按需编译,然后返回给浏览器。

从构建方式来看:

webpack是基于nodejs运行的,但js只能单线程运行,无法利用多核CPU的优势,当项目越来越大时,构建速度也就越来越慢。

vite的预构建和按需编译的过程,都是使用esbuild完成的。

esbuild时用go语言写的,可以充分利用多核CPU的优势,所以vite开发环境下的预构建与按需编译速度,都是非常快的。

热更新:

在webpack中,每次修改文件,都会对整个项目重新打包,对大项目来说,是非常不友好的

在vite项目中,监听到文件变更后,会用websocket通知浏览器,重新发起新的请求,只对该模块重新编译,然后进行替换。并且基于es module的依赖,vite利用浏览器的缓存策略,针对源码模块做了协商缓存处理,针对依赖模块做了强缓存处理

生产环境:

vite生产环境是使用rollup打包的

使用成本:

vite的使用成本低