vite是什么,我们为什么要选择ta?

246 阅读4分钟

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是一种新型的前端构建工具,而不称为打包工具?

构建工具和打包工具的区别

  • 构建过程应该包括:预编译、语法检查、词法检查、依赖处理、文件合并、文件压缩、单元测试、版本管理
  • 打包工具更注重打包这一过程,主要包括依赖管理和版本管理。