Vite基本概念及实现原理

技术分享——解析Vite异步架构设计 引言 Vite 是新一代响应式区块链 (Reactive Blockchain), 采用了基于消息驱动的异步架构,在其生态体系中,异步是一个很重要的概念,也是 Vite 十分重要的一个创新点。 Vite 中的异步设计主要包括三个方面: 请求和响应的异步设计 交易写入和确认的异步设计 合约间通信的异步设计 异步请求模型 Vite 中的交易分为请求交易和响应交易。无论是一笔转账还是一次合约调用,均会在... 阅读详情

介绍

Vite 是一种新型前端构建工具,它主要由两个部分组成:

  • 一个开发服务器: 它基于原生 ES 模块提供了丰富的内建功能,如速度快到惊人的模块热更新
  • 一套构建指令: 它使用 Rollup 打包你的代码,提供指令来优化构建过程,并且它是预配置的,可输出用于生产环境的高度优化过的静态资源

Vite 作为利用浏览器原生 ESM 的构建工具, 省略了开发环境的打包过程,利用浏览器去解析imports,服务端按需编译返回,同时速度快到提升了惊人的模块热更新,而且速度不会随着模块的增加而变慢。所以,使用 Vite 比 Webpack 开发项目快好几倍。

Vite 有以下几个主要特性:

1)极速的冷启动:Vite 采用原生 ESM 作为模块系统的实现,避免了传统打包工具在启动时的长时间编译过程,从而实现了极速的冷启动

2)热模块替换(HMR) :Vite 内置了热模块替换功能,可以在不刷新页面的情况下,实时更新模块代码,提高开发效率

3)原生 ESM 支持:Vite 直接利用浏览器对 ESM 的支持,无需额外转换,使得代码更加原生、高效

4)插件化扩展:Vite 支持通过插件进行扩展,开发者可以根据自己的需求,定制开发流程

实现原理

Vite 的实现原理主要基于原生 ESM、Rollup 以及 WebSocket 等技术

  • 原生ESM:Vite 利用浏览器对 ESM 的原生支持,将项目中的模块按照 ESM 的规范进行组织。在开发过程中,Vite 只会处理被引用的模块,而不会对整个项目进行打包,从而实现了极速的冷启动
  • Rollup:虽然 Vite 没有直接采用 Webpack 作为打包工具,但它借鉴了 Rollup 的思想。Rollup 是一个轻量级的模块打包器,它采用基于 ESM 的 tree shaking 技术,可以去除未使用的代码,减少打包体积。Vite 在构建生产环境代码时,会利用 Rollup 进行打包,因此 Vite 还附带了一套 构建优化 的 构建命令,开箱即用
  • WebSocket:为了实现热模块替换功能,Vite 使用 WebSocket 在服务器和客户端之间建立了一个长连接。当文件发生变化时,服务器会通过 WebSocket 将更新后的模块发送给客户端,客户端收到更新后,会替换掉原有的模块,实现热更新

基于 ESM 的 Dev Server

在 Vite 出现之前,传统的打包工具如 Webpack 通常会在启动开发服务器之前解析所有依赖并进行打包构建,这意味着 Dev Server 必须等待所有模块构建完成,即使在开发过程中只修改了一个子模块,整个 bundle 文件也会重新打包,导致启动时间随着项目规模增大而变长。

在这里插入图片描述

相比之下,Vite 充分利用了浏览器对 ESM 的原生支持。当代码执行到模块加载时,浏览器会动态地下载导入的模块,而不需要等待整个项目的构建完成。这种动态加载的方式实现了即时编译,使得灰色部分(即暂时未用到的路由)不会参与构建过程。因此,随着项目规模的增大和路由的增加,Vite 的构建速度不会受到影响。

在这里插入图片描述

基于 ESM 的 HRM 热更新

ESM(ECMAScript 模块)是 JavaScript 的官方模块系统,由浏览器原生支持。Vite 利用了浏览器对 ES 模块的支持,实现了基于 ESM 的热模块替换(HMR)功能。下面是具体实现原理:

1)模块标识符的处理:Vite 在处理模块时,通过识别 import 语句中的模块标识符,可以动态地构建出模块之间的依赖关系图

2)WebSocket 通信:Vite 启动一个 WebSocket 服务器,用于与客户端建立持久连接,实现双向通信。通过 WebSocket,Vite 可以向客户端发送消息,告知其发生了模块变化,并触发热更新操作

3)模块替换:当开发者修改了某个模块的代码后,Vite 检测到变化后,会重新编译并构建该模块。然后,Vite 通过 WebSocket 向客户端发送更新消息,告知客户端有模块发生了变化

4)客户端处理:客户端接收到更新消息后,会根据更新消息中的信息,以及之前构建好的模块依赖关系图,进行相应的模块替换操作。具体来说,它会以非阻塞的方式请求被更新的模块,然后将新的模块代码插入到当前页面中,完成热更新操作

5)局部更新:Vite 可以实现局部更新,即仅更新发生变化的模块,而不需要重新加载整个应用程序

Vite 实现的核心流程

1)启动服务器

  • Vite 首先启动一个开发服务器,该服务器使用原生 ESM 规范
  • 服务器同时创建一个 WebSocket 连接,用于实现与浏览器的实时通信

2)解析请求

  • 当浏览器请求一个模块时,Vite 服务器接收请求
  • 服务器解析请求,确定要加载的模块

3)模块转换

  • 如果请求的模块需要转换(例如,使用 Vue 或 React 等框架编写的组件),Vite 会调用相应的插件或转换器进行处理
  • 转换后的模块被缓存起来,以便后续请求可以更快地提供服务

4)发送模块到浏览器

  • Vite 服务器将处理后的模块作为 HTTP 响应发送给浏览器
  • 浏览器接收到模块后,按照 ESM 规范进行加载和执行

5)文件监听与热更新

  • Vite 服务器使用文件系统监听器来监控项目文件的变化,当文件发生变化时,Vite 会重新处理受影响的模块
  • 通过 WebSocket 连接,Vite 将更新后的模块发送给浏览器,浏览器接收到更新后,使用 HMR 机制替换旧模块,无需重新加载整个页面

6)构建生产环境代码

  • 当需要构建生产环境的代码时,Vite 会使用 Rollup 或其他打包工具进行打包
  • 打包过程会进行代码优化、压缩和分割等操作,以减小最终代码的体积并提高加载性能
vite打包流程和原理 vite打包原理 阅读详情

相关推荐

Vite底层原理解析

Vite底层原理解析

m0_72030584的博客 1703

了解vite构建工具

vite是一个新型的前端构建工具,他主要由两部分组成,开发工具和构建指令。随着前端应用越来越庞大复杂,例如上千个模块,基于js开发的工具(例如webpack、Rollup、Parcel)就会遇到性能瓶颈,而vite就是用来解决这个问题,他的与构建依赖的速度比js打包构建工具的速度快10~100倍。

妍思码匠的博客 923

电机控制::软件架构::微型软件架构

所谓软件架构就是软件分层:HAL库,嵌入式操作系统,中间件,应用层。大型项目可参考借鉴ROS/PX4/Apollo/FMT等无人机、机器人、无人驾驶等开源项目;电机控制大型为AUTOSAR架构,小型跑裸机参考 前后台系统 或 微型实时操作系统对模块管理的思想。基本原理还是参照大型项目的架构来的,只是大部分层与块都相对简单,也没有操作系统这一层。硬件架构了解不同芯片组合及其各自的特点。1.FPGA+;2.架构;3.TC387+AUTOSAR架构,车规级,汽车领域常用。

one__leaf的博客 1696

Vite简介

vite的介绍

young的博客 5327

用Python玩转农业大数据:从Landsat遥感影像到作物产量预测实战教程

本文详细介绍了如何利用Python处理Landsat遥感影像数据,并结合土壤信息构建作物产量预测模型。从环境搭建、数据预处理到模型训练与可视化,提供了一套完整的农业大数据分析实战方案,帮助读者掌握遥感影像处理和机器学习在精准农业中的应用。

weixin_30832143的博客 399

【电机学复习笔记】同步电机的特性及参数的求取

同步电机的主要特性包括:空载特性、短路特性、零功率因数负载特性、外特性和调整特性。 基于以上特性我们可以实现: 从空载特性和短路特性求同步电抗的不饱和值和短路比; 从零功率因数负载特性和空载特性确定保梯电抗(定子漏抗)和电枢反应电动势

Pantrick_的博客 2万+

Vue 3第二章:Vite文件目录结构及SFC语法

Vue3 支持使用单文件组件(SFC)来组织代码。SFC 将一个组件的模板、样式和逻辑封装在一个文件中,使得组件的代码更加清晰和易于维护。以下是一个简单的 SFC 的例子:

to_the_Future的博客 6361

Wireshark抓包分析:如何从HTTP流量中快速定位黑客攻击痕迹(附pcap文件)

本文通过Wireshark实战,详细解析了如何从HTTP流量中快速定位黑客攻击痕迹。文章提供了核心过滤策略,并重点剖析了如何识别SQL注入攻击的流量特征、揭露WebShell的隐蔽通信以及追踪攻击者在横向移动中的行为,帮助安全人员系统性地从pcap文件中还原完整攻击链。

sprite的博客 1010

Vite文件目录结构介绍

对Vite创建的shop-admin项目的文件目录用途进行介绍

技术btbysj的博客 1896

kettle连接达梦资源库数据库插件

kettle自定义插件plugin database plugin 达梦插件 dm插件

weixin_42122126的博客 2172

手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南

本文提供了手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南。针对国内用户网络不稳定导致自动下载失败的问题,文章核心介绍了如何从错误信息中获取下载链接,使用浏览器或下载工具完成手动下载,并通过指定本地文件路径和参数在R中成功安装。该方法同样适用于SeuratData包中的其他数据集,是单细胞分析入门的必备生存技能。

weixin_29054399的博客 185

Vue3+TS体验并开发+Vite浅析

了解http 日常的使用过程 首先先放置一张图 我们在日常访问网站的过程中。实际上访问的是 所在的IP地址, 域名是什么?,一个代称。方便我们用户对网站进行访问 我们在发送请求的过程中。所遵循的规则(也就是协议)。就是 http协议 为什么要遵守规则(协议)? 举例,就好比打电话。 你说中文。对方讲英语。你们肯定都互相听不懂对方说的什么啊。所以,我们必须规定一个统一的对话格式。也就被称为 规则或者协议 接下来。我们就引出了 http的概念 什么是http HTTP ( 超文本传输协议(Hypertext

weixin_44740261的博客 9093

【GlobalMapper精品教程】027:路径剖面和和视线工具的使用

路径剖面视线工具允许您使用加载的高程数据集沿用户指定的路径获取垂直剖面。要定义生成3D路径剖面所遵循的路径,只需单击鼠标左键选择路径的点,然后石键单击以结束路径。出现一个带有剖面的对话框,允许您设置视线分析或优化端点。

智慧空间实验室 2051

[前端工程化]-vite快速上手

Vite是思维比较前卫而且先进的构建工具 他确实解决了一些webpack解决不了的问题,同时降低了一些心智负担, 已经有一些大厂在使用vite去构建项目vite基于自己得天独厚的优势,他未来一定会占有一席之地, 前段时间阿里的面试已经在问Vite了Vite是vue团队的官方出品,背靠这么大的生态,vue-cli会在下面两个版本中将vite作为预设构建工具。

. 1258

最强AI插件Augment,适配idea、vscode,对标cursor!

Augment是一款新兴的AI辅助编码工具,能够无缝集成到IDEA和VS Code等主流IDE中,直接对标专业AI编码工具Cursor。其核心优势包括多IDE适配、无缝集成、代码理解与生成以及对话式编程体验。Augment通过插件形式保留原IDE功能和快捷键习惯,降低学习成本,同时提供深度理解项目上下文和生成高质量代码的能力。此外,Augment还具备审查变更、检查点、代理与代理自动等核心功能,支持从简单配置更改到复杂功能实现的各种开发任务。Augment代表了AI辅助编程工具的新方向,通过增强开发者熟悉的

todoitbo的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Vite构建配置中manifest选项的深度解析

在Vite项目的构建配置中,`build.manifest`选项是一个强大但容易被误解的功能。本文将从技术实现角度深入剖析这个配置项的工作原理和使用场景,帮助开发者更好地掌握Vite构建过程中的资源映射机制。 ## manifest的基本概念 Vite的manifest文件本质上是一个JSON格式的映射表,记录了构建过程中原始资源文件名与其最终哈希版本之间的对应关系。这个功能对于需要精确控制资...

gitblog_00922的博客 445

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Vite 实现原理

Vite 实现原理 注:https://www.yuque.com/u1694620/danl0o/eg2xnx 了解 Vite 的核心实现原理 Vite 概念 • Vite 是一个面向现代浏览器的一个 更轻、更快的 Web 应用开发工具 • 它基于 ECMAScript 标准原生模块系统(ES Module)实现 • 它的出现是为了解决 webpack 在开发阶段,使用 webpack-dev-server 冷启动时间过长、webpack HMR 热更新响应慢的问题 • 使用 Vite 创建的项目,就是一

weixin_38550182的博客 6115

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Vite介绍及实现原理

Vite是一种新型的前端构建工具,它能显著改善前端开发体验。Vite由两个主要部分组成:一个开发服务器,它基于 原生 ES 模块(ESM),提供了 丰富的内建功能,如速度快到惊人的 模块热更新(HMRESM:ESM是浏览器支持的一种模块化方案,允许在浏览器实现模块化。ES6之前,JS一直没有自己的模块体系。但是ES6引入了ESM,到此,JS终于有了自己的模块体系。HMR。

King的博客 4268

Vite实现原理

接下来再来回顾一下Vite,之前已经演示过Vite的基本使用,这里的重点是来了解Vite的核心实现原理。先来回顾一下Vite的概念,ECMAScriptES Module它的出现是为了解决外webpack在开发阶段使用冷启动时间过长,另外热更新反应速度慢的问题。使用Vite创建的项目就是一个普通的Vue3的应用,没有太多特殊的地方,相比基于Vue cli创建的项目也少了很多的配置文件和依赖。Vite创建的项目开发依赖非常的简单,只有vite和@。Vite就是接下来要模拟实现的命令航工具,

5coder的大前端进阶之路-个人博客网站:blog.5coder.cn 1445

Vite 的实现原理,确实很巧妙

今天我们分析了下 vite 的实现原理。它是基于浏览器的 type 为 module 的 script 可以直接下载 es module 模块实现的。做了一个开发服务,根据请求的 url 来对模块做编译,调用 vite 插件来做不同模块的 transform。但是 node_modules 下的文件有的包是 commonjs 的,并且可能有很多个模块,这时 vite 做了预构建也叫 deps optimize。

Web面试那些事儿的博客 1358

vite 原理详解

Vite 介绍 Vite是Vue作者尤雨溪又一个备受关注的开源项目,它是一个前端构建工具,可类比Webpack。它主要解决了传统bundle-base服务器在开发时遇到的两个问题: 服务器启动速度慢,而且其启动时间是跟应用规模成正比的。 在更新时,即便使用了HMR,但是其热更新的时间仍是会随着应用规模的增长而直线下降。 它解决的是开发的时候的效率问题,对于生产环境则是交给了Rollup。除此之外,它还有以下优点: 对ts、jsx、css等开箱即用,无需配置。 对于库开发者也是可以通过简单的配置...

huangyilinnuli的博客 6282

vite底层实现原理

好问题 👍。我给你从整体到细节把梳理一下,分成和两部分来看。

qq_25416827的博客 688

Vite 打包原理

Vite 的打包功能基于 Rollup,一个强大的 JavaScript 模块打包器。通过深入理解 Vite 的打包原理,开发者可以更好地利用这一工具,满足复杂的业务需求。希望本文对你有所帮助,如果你有任何问题或建议,欢迎在评论区留言讨论。

你若盛开,清风自来 1358

vite原理

1.什么是模块化? 2.为什么需要模块化? 3.有哪些模块化规范?

ass_ace 2540

vite简介、原理及简单实现

文章目录vite简介:1、快速冷启动(对比vue-cli):2、模块热更新 HMR:3、按需编译 buildvite build:使用webpack打包原因(打包起因):4、开箱即用:vite特性总结:vite原理1、静态服务器2、处理模块处理的路径,如 from 'vue' -> from '/@modules/vue.js'3、加载第三方模块,如 /@modules/vue.js4、处理单文件模块vite初步实现: vite简介: vite基于es modules 实现,面向现代浏览器的更轻、快的

qq_34425377的博客 2208
上一篇: Webpack基本概念及核心流程
下一篇: Webpack 搭建 Vue3 脚手架详细步骤
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值