前端构建工具vite的优势

news2024/11/29 2:50:53


1. 极速冷启动

  • Vite 使用原生 ES 模块 (ESM) 在开发环境下进行工作。相比于传统构建工具需要打包所有的文件,Vite 只在浏览器请求模块时动态加载所需的文件。
  • 无打包冷启动:无需预先打包,项目启动非常快,尤其对于大型项目效果更明显。

2. 模块热替换 (HMR) 更加快速

  • Vite 内置了高效的模块热替换 (Hot Module Replacement, HMR) 功能,更新某个模块时,Vite 只会精确地替换被更改的模块,不会像传统构建工具一样重新构建整个应用。
  • HMR 响应更快:当你在开发时修改文件,Vite 能快速更新页面内容,极大提升开发体验。

3. 按需编译

  • 在开发环境下,Vite 会根据浏览器的请求按需编译代码,而不是一次性编译所有文件。这意味着如果某些模块从未被导入,就不会被编译,进一步提高了开发时的性能。

4. 更好的现代化支持

  • Vite 默认支持现代浏览器,利用原生 ES 模块和最新的 JavaScript 特性,不需要为老旧浏览器生成复杂的代码或 polyfill。这使得 Vite 的编译输出更轻量。
  • 轻量级的生产构建:生产环境使用 Rollup 打包,确保最终打包质量且优化文件大小。

5. 内置优化

  • Vite 内置对 TypeScript、JSX、CSS、JSON 等的支持,无需额外配置即可使用现代前端特性。
  • 自动依赖预构建:Vite 会自动预构建较大的依赖包(例如 React、Vue 等),减少了这些依赖的解析开销,加快页面加载速度。

6. 插件生态与扩展性

  • Vite 有着灵活的插件机制,基于 Rollup 插件系统,支持大部分 Rollup 插件,开发者可以方便地扩展功能。
  • 支持多种框架:Vite 原生支持 Vue、React、Preact 等框架,并有很好的 TypeScript 支持。

7. 优化的生产环境构建

  • Vite 在生产模式下会使用 Rollup 进行打包,Rollup 是一个成熟且优化的打包工具,能生成体积小、性能优良的打包文件。
  • 轻量级打包:通过树摇和代码分割等优化技术,生成的最终构建包体积更小、加载更快。

8. CSS/JS 处理优化

  • Vite 内置了对 CSS 和 JS 的处理优化,CSS 可以按需加载,JS 代码可以模块化分割,且支持动态导入。

9.适用场景

Vite 特别适合那些希望快速开发、追求现代工具链的开发者,尤其是使用 Vue、React、Svelte 等现代框架的项目。
vite和webpack构建对比图
vite:

webpack:


10.Vite 和 Webpack优缺点

1. 启动速度
  • Vite
    • 优点:Vite 利用浏览器的原生 ES 模块(ESM)加载机制,不需要对整个项目进行打包,因此启动速度极快。它只会在浏览器请求某个模块时编译相关文件,尤其在大型项目中,冷启动时间大大缩短。
    • 缺点:Vite 的这种按需编译模式在开发环境中非常快,但在不支持原生 ES 模块的旧浏览器中,可能需要特殊处理。
  • Webpack
    • 优点:Webpack 在启动时需要对整个项目进行一次完整打包,启动时间较长,但它会缓存构建结果,重复构建时速度会有所提升。
    • 缺点:冷启动时间较慢,尤其是对于大型项目,Webpack 启动时间可能会显著拖延开发效率。
2. 模块热替换(HMR)
  • Vite
    • 优点:由于 Vite 采用了基于 ES 模块的动态加载机制,它可以精确替换被修改的模块,HMR 速度非常快,通常是毫秒级响应。
    • 缺点:HMR 的性能与项目模块的复杂度有关,对于特别复杂的项目,HMR 的维护可能需要调整。
  • Webpack
    • 优点:Webpack 也支持模块热替换,且经过多年的优化和实践,HMR 已经相当成熟,适用于各类场景。
    • 缺点:由于 Webpack 打包方式的特点,模块更新时,可能需要替换更多的文件,导致 HMR 速度较慢,特别是在大规模项目中。
3. 开发模式
  • Vite
    • 优点:在开发模式下,Vite 不会打包整个应用,它基于 ESM 直接提供服务,因此开发时的响应速度非常快。
    • 缺点:需要现代浏览器支持 ES 模块。如果需要兼容老版本浏览器,可能需要额外配置。
  • Webpack
    • 优点:Webpack 使用一个开发服务器(如 webpack-dev-server)来提供开发环境,经过多年的完善,其开发模式能够支持复杂的构建和兼容性处理。
    • 缺点:由于需要打包整个应用,构建过程较慢,尤其在项目规模变大的情况下。
4. 生产环境打包
  • Vite
    • 优点:Vite 在生产环境中使用 Rollup 进行打包,具有更细粒度的代码分割和更优化的打包结果。最终生成的打包文件更轻量、加载更快。
    • 缺点:Rollup 对某些特殊构建需求或插件生态的支持可能没有 Webpack 那么成熟,可能需要手动调整或额外配置。
  • Webpack
    • 优点:Webpack 通过多年的发展,生产环境的构建功能非常强大,支持代码分割、懒加载、Tree Shaking、插件系统等多种优化技术,生态非常丰富。
    • 缺点:Webpack 的配置复杂,打包速度可能相对较慢,尤其在处理大规模应用时,构建时间可能较长。
5. 配置复杂度
  • Vite
    • 优点:Vite 提供了开箱即用的默认配置,极大简化了开发者的工作。特别是对于 Vue、React 等现代框架,Vite 原生支持,无需复杂的配置即可启动。
    • 缺点:Vite 的插件生态尚在发展中,部分复杂场景下,可能需要开发者深入了解 Rollup 及其插件系统进行定制化配置。
  • Webpack
    • 优点:Webpack 提供了强大的自定义配置能力,可以处理几乎所有的前端需求,且拥有丰富的插件和 Loader 来扩展功能。
    • 缺点:Webpack 的配置较为复杂,新手开发者需要花费较多时间来学习和调试其配置文件。
6. 依赖处理
  • Vite
    • 优点:Vite 会自动预构建依赖,使用 esbuild 来处理依赖的编译,esbuild 使用 Go 编写,编译速度极快,因此依赖处理非常高效。
    • 缺点:对于一些非常复杂或较旧的依赖库,可能需要额外处理其兼容性问题。
  • Webpack
    • 优点:Webpack 的依赖处理机制较为成熟,兼容性好,能够很好地处理不同版本、不同格式的依赖。
    • 缺点:依赖处理和打包时间较长,特别是当项目依赖较多时,Webpack 的构建时间可能会明显增加。
7. 插件生态
  • Vite
    • 优点:Vite 的插件系统基于 Rollup 插件机制,且具有很强的扩展性。Vite 的现代化设计使其插件开发较为简便,生态正在快速成长。
    • 缺点:虽然插件生态在快速发展,但相对于 Webpack,Vite 的插件数量和成熟度仍然稍显不足。
  • Webpack
    • 优点:Webpack 拥有非常成熟的插件生态系统,几乎可以找到适用于任何需求的插件,支持从性能优化、代码分割、到兼容性处理等各种场景。
    • 缺点:插件多样性和配置复杂度可能会增加开发者的学习成本,某些插件可能需要额外调整配置才能正常工作。
8. 兼容性
  • Vite
    • 优点:Vite 专注于现代浏览器的开发体验,开发时使用的是原生 ES 模块,因此对于现代开发有非常好的支持。
    • 缺点:如果需要支持 IE11 等老旧浏览器,可能需要进行一些额外的 polyfill 和配置。
  • Webpack
    • 优点:Webpack 可以很好地支持各种现代与旧版浏览器,并提供大量工具和插件来帮助处理浏览器兼容性问题。
    • 缺点:为旧版浏览器提供兼容支持通常会增加打包复杂性和配置时间。

总结

特性Vite 优点Vite 缺点Webpack 优点Webpack 缺点
启动速度极速冷启动,适合大型项目仅现代浏览器支持最佳经过多次优化,支持缓存冷启动较慢,特别是大型项目
HMR高效的热更新,毫秒级响应对特别复杂项目 HMR 效果可能减弱HMR 支持成熟HMR 速度较慢
开发模式基于 ESM 的快速开发模式现代浏览器支持最佳功能强大,适应各种需求打包过程较慢
生产环境打包使用 Rollup 打包,打包结果轻量优化需要 Rollup 插件支持,生态不如 Webpack 完善生态成熟,功能丰富构建时间可能较长,配置复杂
依赖处理使用 esbuild 预构建依赖,编译速度快旧依赖库可能需要额外处理依赖处理成熟依赖处理速度相对较慢
插件生态插件开发简单,生态快速成长插件数量和成熟度不如 Webpack插件丰富,几乎支持所有场景插件多样性增加了配置复杂度
兼容性支持现代浏览器的最佳开发体验兼容旧浏览器需要额外配置良好的旧浏览器兼容性为旧浏览器提供支持可能增加打包体积与复杂度

适用场景

  • Vite:适合现代开发项目,特别是使用 Vue、React 等框架的中小型或大型项目,开发体验流畅。
  • Webpack:适合兼容性要求高、复杂度高的大型项目,特别是需要处理复杂的构建需求。

 vite官网:https://cn.vite.dev/guide/why.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2222219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

顺序表(一)(数据结构)

一. 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列 。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,是人为想象出来的数…

HCIP--1

同一区域内的OSPF路由器拥有一致的 LSDB, 在区域内,OSPF 采用 SPF算法计算路由一个区域太多路由器,硬件资源跟不上,所以多划分区域 OSPF 路由计算原理 1. 区域内路由计算 LSA 在OSPF中,每个路由器生成 LSA,用于告诉…

【部署篇】RabbitMq-03集群模式部署

一、准备主机 准备3台主机用于rabbitmq部署,文章中是在centos7上安装部署rabbitmq3.8通过文章中介绍的方式可以同样在centos8、centos9上部署,只需下载对应的版本进行相同的操作。 主机IP角色说明192.168.128.31种子节点192.168.128.32普通节点192.16…

Matlab学习01-矩阵

目录 一,矩阵的创建 1,直接输入法创建矩阵 2,利用M文件创建矩阵 3,利用其它文本编辑器创建矩阵 二,矩阵的拼接 1,基本拼接 1) 水平方向的拼接 2)垂直方向的拼接 3&#xf…

Linux系统基础-进程间通信(5)_模拟实现命名管道和共享内存

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Linux系统基础-进程间通信(5)_模拟实现命名管道和共享内存 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨…

LeetCode--删除并获得点数--动态规划

一、题目解析 二、算法原理 根据题意,在选择了元素 x 后,该元素以及所有等于 x−1 或 x1 的元素会从数组中删去。若还有多个值为 x 的元素,由于所有等于 x−1 或 x1 的元素已经被删除,我们可以直接删除 x 并获得其点数。因此若选…

Win10+MinGW13.1.0编译Qt5.15.15

安装windows SDK、python、ruby、cmake、Perl[可选]安装MySQL解压qt-everywhere-opensource-src-5.15.15.zip(注:不要使用qt-everywhere-opensource-src-5.15.15.tar.xz)修改源代码 E:\qt-everywhere-src-5.15.15\qtbase\src\3rdparty\angle\…

hive数据库,表操作

1.创建; create database if not exists myhive; use myhive; 2.查看: 查看数据库详细信息:desc database myhive; 默认数据库的存放路径是 HDFS 的: /user/hive/warehouse 内 补充:创建数据库并指定 hdfs 存储位置:create database myhive2 location /myhive2 3.…

<项目代码>YOLOv8路面垃圾识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

Codeforces Round 881 (Div. 3)(A~F1题解)

这场比赛可能是因为比较老吧,我感觉很轻松,就是第五个卡了一下,看错题了,原本应该是严格大于的,从而导致代码一直出现bug,在1小时20分钟才解决 A. Sasha and Array Coloring 题意:就是说给你n个…

提权 | Windows系统

文章目录 cmd提权meterpreter提权getsystemsteal_tokenmigrate 令牌窃取(MS16-075)烂土豆提权步骤烂土豆提权原理 sc命令提权抓本地密码提权其他工具pr工具 内核提权WindowsVulScan cmd提权 前言:我们getshell一个用windows部署的网站后,通过蚁剑或者其…

ESP32 S3 语音识别 语音唤醒程序流程

ESP32 S3 语音识别 语音唤醒程序流程 参考例程首先进行esp_periph_set_init 初始化之后执行setup_player,之后执行start_recorder,识别的主处理voice_read_task 参考例程 D:\Espressif\esp-adf\examples\speech_recognition\wwe\ 首先进行esp_periph_se…

零知识学习WLAN漫游二、无线漫游介绍(2)

接前一篇文章:零知识学习WLAN漫游一、无线漫游介绍(1) 本文内容参考: WLAN漫游简介_漫游主动性-CSDN博客 无线漫游_百度百科 无线漫游简述-CSDN博客 特此致谢! 一、WLAN漫游简介 3. 漫游协议和快速漫游协议 802.…

算法的学习笔记—数字在排序数组中出现的次数(牛客JZ53)

😀前言 在编程中,查找有序数组中特定元素的出现次数是一个常见的问题。本文将详细讲解这个问题的解决方案,并通过二分查找法优化效率。 🏠个人主页:尘觉主页 文章目录 🥰数字在排序数组中出现的次数&#x…

九、pico+Unity交互开发——触碰抓取

一、VR交互的类型 Hover(悬停) 定义:发起交互的对象停留在可交互对象的交互区域。例如,当手触摸到物品表面(可交互区域)时,视为触发了Hover。 Grab(抓取) 概念&#xff…

深入浅出:深度学习模型部署全流程详解

博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: Yaoyao2024往期回顾: 【论文精读】PSAD:小样本部件分割揭示工业异常检测的合成逻辑每日一言🌼: 生活要有所期待, 否则就如同罩在…

【国潮来袭】华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布:鸿蒙诞生以来最大升级,碰一碰、小艺圈选重磅上线

在昨日晚间的原生鸿蒙之夜暨华为全场景新品发布会上,华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布。 华为官方透露,截至目前,鸿蒙操作系统在中国市场份额占据 Top2 的领先地位,拥有超过 1.1 亿 的代码行和 6…

想让前后端交互更轻松?alovajs了解一下?

作为一个前端开发者,我最近发现了一个超赞的请求库 alovajs,它真的让我眼前一亮!说实话,我感觉自己找到了前端开发的新大陆。大家知道,在前端开发中,处理 Client-Server 交互一直是个老大难的问题&#xff…

查缺补漏----用户工作区,系统缓冲区,外设工作最短时间计算

对于下面这一题,分析起来很简单: 答案:C 以上是单缓冲区,补充双缓冲区是什么情况: 1.假设磁盘块与缓冲区大小相同,每个盘块读入缓冲区的时间为15us,由缓冲区送至用户区的时间是5us&#xff0c…

etl-查询错误log日志和oracle删除数据表空间

查看weblogic日志的目录 建立连接ssh root192.168.30.1xx 密码hygd123 找到下面路径中的文件 cd /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bapp-logs 查看log日志 tail -f -n 400 Adminservers.log oracle删除表空间(切换到dba用户…