vite是什么?
- vite是一种新型的前端构建工具,他能显著改善前端开发体验。
为什么选他?
- 当我们开始构建越来越大的应用时,需要处理的JavaScript代码量会越来越庞大
- 可能开始遇到瓶颈,需要很长时间才能启动开发服务
- 使用HMR, 文件修改后也需要几秒钟的时间才能在浏览器反应出来
- 缓慢的服务启动,当你冷启动开发服务器的时候, 基于打包器的方式启动,必须有限抓取并构建你的整个应用,然后才能提供服务。
- 在实践中,我们发现,即使使用了hmr模式,其实热更新的速度也会随着应用规模的增长从而显著下降
vite的优势?
-
vite在启动的时候不需要打包,也就意味着不需要分析模块的依赖、不需要编译。因此启动起来速度会比较快。
-
当浏览器请求某个模块时,再根据需要对模块内容进行编译。
-
这种按需动态编译的方式,极大的缩减了编译时间,项目越是复杂、模块越多。vite的优势就越是明显。
-
vite同时利用了HTTP头来加速整个页面的重新加载
-
vite以原生ESM方式提供源码。这实际上是让浏览器接管了打包程序的部分工作。
-
在vite中,HMR是在原生ESM上执行的。
-
vite2.0宣布使用esbuild预构建依赖
-
Esbuild则选择Go语言编写, 在资源打包这种cpu密集型场景下,Go更具有性能优势,并且比以JavaScript编写的打包器预构建依赖快10-100倍。
vite为什么比webpack快?
-
webpack是js应用程序的静态模块打包器(module bundler)
-
webpack会递归地构建一个依赖关系图,然后将所有这些模块打包成一个或多个包
-
在webpack.config.js文件中配置多入口,告诉webpack从哪个文件开始构建依赖图。打包完输出bundle.js,他是一个iife匿名自执行函数,参数是Object,key是我们项目中的每个模块,value是一个function,模块中的代码都会被解析后放在这个function内,可以看出他的整个运行流程是一个串行的过程,从启动到结束,依次执行。他要读取项目中所有的模块,然后打包。然后才运行。
-
ES modules(ESM) 是JavaScript官方的标准化模块系统。
-
ESM 标准规范了如何把温江解析为模块记录,如何实例化和如何运行模块。
-
ESM 则使用称为实时绑定(live Binding)的方式,导入和导出模块都指向相同的内存地址(即值引用)。
-
所以当导出模块内导出的值改变后,导入模块的值也是实时改变了。
-
所以从机制上来讲,webpack就不可能比vite快,如果你想了一个办法,能让webpack也像vite那样快, 那么webpack它也就不是webpack了,vite在启动的时候不需要打包,也就意味着不需要分析模块依赖、不需要编译。因此启动速度非常快,当浏览器请求某个模块时,再根据需要对模块内容进行编译。
-
这种按需动态变异的方式,极大的缩减了编译时间,项目越是复杂、模块越多,vite的优势就会越明显。
-
当需要打包到生产环境的时候,vite使用传统的rollup进行打包。因此vite的主要优势在于开发阶段。
-
在目前看来,webpack和vite并不是一个对立的关系。因为vite主要解决的还是开发体验问题,就是速度快。而webpack它主要的工作还是打包,而且是各种类型文件的打包。
为什么说,vite是一种新型的前端构建工具,而不称为打包工具?
构建工具和打包工具的区别
- 构建过程应该包括:预编译、语法检查、词法检查、依赖处理、文件合并、文件压缩、单元测试、版本管理
- 打包工具更注重打包这一过程,主要包括依赖管理和版本管理。