前端构建工具vite的优势
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)来提供开发环境,经过多年的完善,其开发模式能够支持复杂的构建和兼容性处理。 - 缺点:由于需要打包整个应用,构建过程较慢,尤其在项目规模变大的情况下。
- 优点:Webpack 使用一个开发服务器(如
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 编写,编译速度极快,因此依赖处理非常高效。 - 缺点:对于一些非常复杂或较旧的依赖库,可能需要额外处理其兼容性问题。
- 优点:Vite 会自动预构建依赖,使用
- 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
相关文章:
前端构建工具vite的优势
1. 极速冷启动 Vite 使用原生 ES 模块 (ESM) 在开发环境下进行工作。相比于传统构建工具需要打包所有的文件,Vite 只在浏览器请求模块时动态加载所需的文件。无打包冷启动:无需预先打包,项目启动非常快,尤其对于大型项目效果更明…...
hive查询语句
1.基本语法 SELECT [ALL | DISTINCT]select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BYcol_list] [HAVING where_condition] [ORDER BYcol_list] [CLUSTER BYcol_list | [DISTRIBUTE BY col_list] [SORT BY col_list] ] [LIMIT number] …...
【AIGC】2024-ECCV-ControlNet++:通过有效的一致性反馈改进条件控制
2024-ECCV-ControlNet: Improving Conditional Controls with Efficient Consistency Feedback ControlNet:通过有效的一致性反馈改进条件控制摘要1. 引言2. 相关工作2.1 基于扩散的生成模型2.2 可控的文本到图像扩散模型2.3 语言和视觉奖励模型 3. 方法3.1. 初步3.…...
Mysql5.7变为GreatSQL 8.0.32-25过程中,SQL语句报错及解决方案
考虑兼容国产化数据库,现需要将Mysql5.7变为GreatSQL,在执行部分sql时,发现在Mysql5.7无报错,在GreatSQL有报错,在此记录一下遇到的几个错误。 1.ERROR 1231 (NO_AUTO_CREATE_USER) 1.1.报错提示 ERROR 1231 (42000…...
Qt 使用QAxObject将QTableView数据导出到Excel表格
这是我记录Qt学习过程的第6篇心得文章,主要是方便自己编写的应用程序导出Excel数据的,走了不少弯路直接上代码。 实现代码: //人员信息导出 ui->pbtn2->setEnabled(false); // 打开文件对话框,选择 excel文件 QString fil…...
fastGpt
参考本地部署FastGPT使用在线大语言模型 1 rockylinx 1 ollama安装 在rockylinux中安装的,ollama由1.5G,还是比较大,所有采用在windows下下载,然后安装的方式,linux安装 tar -C /usr -xzf ollama-linux-amd64.tgz #…...
如何全方位应对服务可用性的挑战
在数字化转型的浪潮中,运维团队正站在企业IT架构的核心位置,面对着前所未有的挑战。服务响应时间和失败率,作为衡量服务质量的重要指标,一直备受关注。然而,在追求这两项指标优化的同时,运维团队还需关注其…...
二进制方式部署k8s集群
目标任务: 1、Kubernetes集群部署架构规划 2、部署Etcd数据库集群 3、在Node节点安装Docker 4、部署Flannel网络插件 5、在Master节点部署组件(api-server,schduler,controller-manager) 6、在Node节点部署组件(kubelet,kube-proxy) 7、查看集群状态 8、运行⼀个测…...
Vivado时序报告七:Report Clock NetworkReport Clock Interaction详解
目录 一、前言 二、Report Clock Network 2.1 Report Clock Network流程 2.2 Report Clock Network报告 三、Report Clock Interaction 3.1 示例设计 3.2 配置选项 3.2.1 Options 3.2.2 Timer_Settings 3.3 Clock Interaction报告 3.3.1 Clock Pair Classification …...
HarmonyOS 组件样式@Style 、 @Extend、自定义扩展(AttributeModifier、AttributeUpdater)
1. HarmonyOS Style 、 Extend、自定义扩展(AttributeModifier、AttributeUpdater) Styles装饰器:定义组件重用样式 ;Extend装饰器:定义扩展组件样式 自定义扩展:AttributeModifier、AttributeUpdater 1.1. 区…...
信息安全工程师(73)网络安全风险评估过程
一、确定评估目标 此阶段需要明确评估的范围、目标和要求。评估目标通常包括特定的网络系统、信息系统或网络基础设施,评估范围可能涉及整个组织或仅特定部门。明确评估要求有助于确保评估过程的针对性和有效性。 二、收集信息 在评估开始之前,需要对目标…...
在MacOS玩RPG游戏 - RPGViewerPlus
背景知识 由于我一直使用Mac电脑,所以一直对Mac如何玩RPGMV/RPGMZ游戏的方式有进一步的想法。 网上能给出的方案都是自行启动一个HTTP服务进行,进行服务加载。这个方法有效,但兼容性较差。涉及到自定义功能模块的游戏,都会有报错…...
2024.10.27 直接插入排序 非递归后序遍历(复杂版)
直接插入排序 思路:用temp变量存放需要插入前面有序序列的变量,然后用里面的那个for循环寻找到需要插入的位置。 额外注意的点:arr[j1]temp;这个是因为内置循环每次出来之后所指向的位置是我们要插入的位置的前一个(-1或者插入…...
Ubuntu 22.04系统启动时自动运行ROS2节点
在 Ubuntu 启动时自动运行 ROS2 节点的方法 环境:Ubuntu 系统,ROS2 Humble,使用系统自带的 启动应用程序 目标:在系统启动时自动运行指定的 ROS2 节点 效果展示 系统启动后,自动运行小乌龟节点和键盘控制节点。 实践…...
张三进阶之路 | 基于Spring AOP的Log收集
前情提要 📌 张三对于公司的日志处理系统不满意,认为其性能不佳且功能有限。为了展示自己的能力和技术实力,他决定利用Spring AOP(面向切面编程)开发一个更高效的日志处理系统,并将其存储在Redis中。 首先…...
ubuntu新装ubuntu,重启黑屏
现象:双系统电脑向移动硬盘安装Ubuntu系统后,重启黑屏并显示Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists possible device or file completions. 又拔下无法启…...
太极安全监控系统0.8
完善后的代码及功能详细介绍 完善后的代码 python import os import sys import subprocess import re import datetime import threading import tkinter as tk from tkinter import messagebox, simpledialog, ttk import scapy.all as scapy import whois import numpy as …...
E-清楚姐姐的布告规划【01背包】
就当一个01背包写就行,只不过需要保证不交叉,w[i]覆盖i点,用一个if来判断即可 #include<bits/stdc.h> #define int long long using namespace std; int w[5005]; int f[5005]; int t,n,m; signed main() {cin>>t;while(t--){…...
哪款宠物空气净化器噪音低?希喂、美的、安德迈测评分享
今年双11,宠物空气净化器到底应该如何选?在所有的家电品类里,宠物空气净化器算是比较特殊的那个,产品迭代太快,我们把今年双11在售的各大主流品牌的宠物空气净化器统一汇总整理,发现基本一多半都是24年下半…...
2024年10月23日第一部分
1.马小民要不要承担责任 2.主动 我就是那种平常沉默寡言孤僻内向自卑又宅又无趣,感觉不管在哪里都是比较边缘不合群的人。6月份遇到一个女生,还是人家主动加的我,断断续续聊了一个月就没下文了,可能我没谈过恋爱吧,快…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
