首页 > 其他分享 >vite和webpack对比

vite和webpack对比

时间:2024-04-12 10:12:05浏览次数:28  
标签:浏览器 webpack vite 模块 esbuild 对比 打包

定位分析

打包工具:webpack、rollup、parcel、esbuild

作用:可以对代码进行压缩、合并、转换、分割、打包

衍生:vue-cli、create-react-app、umi 等是基于webpack的上层封装,用于快速创建项目

vite:开发环境依赖esbuild进行预构建,生产环境则依赖rollup进行打包

差异分析

1、启动差异

webpack:webpack会根据我们配置文件(webpack.config.js) 中的入口文件(entry),分析出项目项目所有依赖关系,会将所有文件编译一遍,无论模块是否被执行,项目复杂度越增加,启动时间就越长。然后打包成一个文件(bundle.js),交给浏览器去加载渲染。

bundle.js:是可以被浏览器认识的,拿来即可直接运行的 js 文件。bundle.js 的本质是一个立即执行函数,这个函数的输入是依赖拓补图(一个js 对象),没有输出。内部会按照依赖顺序,依次以 eval(code) 的形式运行代码。

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

es module:使用 import 用于导入模块, export 用于导出模块。模块内部的变量和函数默认是私有的,不会污染全局作用域,浏览器遇到内部的import引用时,会自动发起http请求,去加载对应的模块。

2、底层差异

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

vite=>esbuild:基于Go语言,可以充分利用多核CPU的优势,它在构建依赖的速度上比使用JavaScript编写的打包器快10-100倍。

vite=>http2:可以并发请求,在之前http1的时候,浏览器对同一个域名的请求,是有并发限制的,一般为6个,如果并发请求6个以上,就会造成阻塞问题,所以在http1的时代,我们要减少打包产物的文件数量,减少并发请求,来提高项目的加载速度。2015年以后,http2出现了且没有并发限制。这时候,将打包产物分成多个小模块,并行去加载。vite也充分利用了这一优势,对项目资源进行了合理的拆分,访问项目时,同时加载多个模块,来提升项目访问速度。

3、热更新效率

webpack项目中,每次修改文件,都会对整个项目重新进行打包,虽然webpack现在有了缓存机制,但还是无法从根本上解决这个问题。

vite vite项目中,监听到文件变更后,会用websocket通知浏览器,重新发起新的请求,只对该模块进行重新编译,然后进行替换。 并且基于es module的特性,vite利用浏览器的缓存策略,并且做了协商缓存处理,针对依赖模块(第三方库)做了强缓存处理,所以热更新效率高。

4、打包差异

Rollup 是一款 ES Module 打包器相比于 Webpack,Rollup要小巧的多,打包生成的文件更小更快。vite正是基于es module的特性实现的,所以使用rollup要更合适一些。

为什么不适用esbuild打包:

Vite 目前的插件 API 与使用 esbuild 作为打包器并不兼容,rollup插件api与基础建设更加完善,生产环境vite使用rollup打包会更稳定一些。 如果后面esbuild基础建设与生态更加完善后,esbuild还是更有优势的。 所以使用vite可能会带来开发环境与生产环境打包结果不一致的问题。

5、使用差异

如果我们使用webpack自己去搭建项目脚手架时,需要配置比较多的东西, 比如:跨域、代码压缩、代码分割、css预处理器的代码转换、样式兼容性、vue/react代码解析、图片压缩、代码热更新、es降级、ts转换等等,我们需要了解各种loader、plugin的使用,并且需要根据项目场景,对配置不断进行优化 所以就出现了一些基于webpack上层封装的脚手架,如:vue-cli、create-react-app、umi等。

vite vite对我们常用功能都做了内置,比如:css 预处理器、html 预处理器、hash 命名、异步加载、分包、压缩、HMR等等,我们可以很轻松的通过配置项去配置

6、社区生态

Webpack的loader和plugin已经非常成熟,但是,Vite的生态还相对落后,但正在逐渐发展。

 

标签:浏览器,webpack,vite,模块,esbuild,对比,打包
From: https://www.cnblogs.com/JC30705/p/18129552

相关文章

  • vite+xlsx-style表格导出样式设置报错
    项目是vite+vue3,前端表格导出,使用xlsx可以导出基本表格,但是想要设置表格样式,引入xlsx-style,安装依赖,后引入报错引用import { utils } from "xlsx"import { write } from "xlsx-style"Couldnotresolve"./cptable"node_modules/xlsx-style/dist/cpexce......
  • openGauss与PostgreSQL对比测试SSL之自签名CA证书单向认证测试
    openGauss与PostgreSQL对比测试SSL之自签名CA证书单向认证测试本文测试自签名CA证书的单向认证:客户端只验证服务器证书的有效性,而服务器端不验证客户端证书的有效性。服务器加载证书信息并发送给客户端,客户端使用根证书来验证服务器端证书的有效性。服务端证书的客户......
  • Vue3+TS+Vite+pinia
    一、创建项目    创建文件夹,然后cmd,输入以下内容。然后选择TS版本。npmcreatevite二、安装依赖   在vscode中,使用终端,输入命令 npmi三、安装其他插件    3.1、路由vue-router        多页面应用需要安装路由。所以需要使用v......
  • 漫画脸生成器的漫画效果多吗?对比不同软件的输出质量
    虽然清明假期刚过,但是不少人已经开始计划着五一去哪玩了。可不要觉得离谱,都有不少人开始计划年假去不去哈尔滨看冰雕的。当然了,旅行的意义不仅仅在于目的地的到达,更在于过程和记录,拍照肯定是少不了的。如果觉得旅游中拍的照片缺少了一些生动和趣味时,可以通过照片变漫画效果功......
  • NL2SQL基础系列(1):业界顶尖排行榜、权威测评数据集及LLM大模型(Spider vs BIRD)全面对比
    NL2SQL基础系列(1):业界顶尖排行榜、权威测评数据集及LLM大模型(SpidervsBIRD)全面对比优劣分析[Text2SQL、Text2DSL]Text-to-SQL(或者Text2SQL),顾名思义就是把文本转化为SQL语言,更学术一点的定义是:把数据库领域下的自然语言(NaturalLanguage,NL)问题,转化为在关系型数据库中可以执行的......
  • 共享云桌面和虚拟云桌面优劣势对比分析
    随着云计算技术的不断发展,共享云桌面和虚拟云桌面成为了企业信息化建设的热门选择。共享云桌面和虚拟云桌面这两种技术各有优劣势,下面我们将对它们进行对比分析。首先,我们来了解一下共享云桌面的优势。共享云桌面是指多个用户通过云平台共享同一台物理服务器的计算资源,从而实......
  • nodejs + ts + nodemon + webpack 代码热更新
    依赖:npminodemonwebpackwebpack-clits-loadertypescript//webpack.config.jsimport{defaultaswebpack}from"webpack";importnodeExternalsfrom"webpack-node-externals";constplugins=[newCleanWebpackPlugin({dangero......
  • App加固:不同类型和费用对比
    文章目录@[TOC]引言应用程序加固是什么不同类型[App加固](https://www.ipaguard.com/)的费用对比基础加固高级加固云加固白嫖的混淆加密工具](https://www.ipaguard.com/)-[ipaguard总结参考资料引言在当前移动应用市场中,安全性已经成为一个非常重要的话题。为了保......
  • App加固:不同类型和费用对比
    文章目录@[TOC]引言应用程序加固是什么不同类型[App加固](https://www.ipaguard.com/)的费用对比基础加固高级加固云加固白嫖的混淆加密工具](https://www.ipaguard.com/)-[ipaguard总结参考资料引言在当前移动应用市场中,安全性已经成为一个非常重要的话题。为了保......
  • openGauss数据与PostgreSQL的差异对比
    openGauss数据与PostgreSQL的差异对比前言openGauss数据库已经发布2.0.1版本了,中启乘数科技是一家专业的专注于极致性能的数据库服务提供商,所以也关注openGauss数据库的特性。因为openGauss是从PostgreSQL发展出来的,所以我们详细讲解对比一下openGauss与原生Po......