前端构建工具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月份遇到一个女生,还是人家主动加的我,断断续续聊了一个月就没下文了,可能我没谈过恋爱吧,快…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
