10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

Vite 4.3 正式发布,性能提升

  • 2023-04-24
    北京
  • 本文字数:1638 字

    阅读完需:约 5 分钟

Vite 4.3正式发布,性能提升

性能改进


在本次小版本迭代中,我们专注于提高开发服务器的性能。解析逻辑得到简化,热路径性能升级,缓存在查找 package.json、TS 配置文件和经过解析的 URL 时也更加智能。


感兴趣的朋友可以参考这篇博文,了解 Vite 贡献者们如何让 Vite 4.3 实现速度飞跃(https://sun0day.github.io/blog/vite/why-vite4_3-is-faster.html)。


与 Vite 4.2 相比,这个冲刺版本实现了全面的速度跃迁。


下面来看 sapphi-red/performance-compare 测得的性能改进,其中测试了开发服务器在对一款包含 1000 个 React 组件的应用进行冷、热启动时的时间,以及根、叶子组件的热替换(HMR)时间:






这里(https://gist.github.com/sapphi-red/25be97327ee64a3c1dce793444afdf6e)了解关于测试基准的更多信息。此次性能测试的运行硬件和 Vite 版本为:


  • CPU: Ryzen 9 5900X, 内存: DDR4-3600 32GB, SSD: WD Blue SN550 NVME SSD

  • Windows 10 Pro 21H2 19044.2846

  • Node.js 18.16.0

  • Vite 与 React Plugin 版本


1.Vite 4.2 (babel): Vite 4.2.1 + plugin-react 3.1.0

2.Vite 4.3 (babel): Vite 4.3.0 + plugin-react 4.0.0-beta.1

3.Vite 4.2 (swc): Vite 4.2.1 + plugin-react-swc 3.2.0

4.Vite 4.3 (swc): Vite 4.3.0 + plugin-react-swc 3.3.0


早期采用者还上报称,在测试 Vite 4.3 beta 版时,应用程序的实际开发启动速度提高了 1.5 至 2 倍,我们也期待大家上报更多性能感受。


我们将继续努力提高 Vite 性能。目前我们正在为 Vite 开发一款官方基准测试工具,借此记录每条 Pull Request 的性能指标。


另外,vite-plugin-inspect 现在提供更多与性能相关的功能,可帮助大家确定哪些插件或中间件构成了应用程序的性能瓶颈。


在页面加载完成后,可以使用 vite --profile (之后按 p)以保存开发服务器启动的 CPU 配置文件。您可以在应用程序中将其作为 speedscope 打开以检查性能问题。大家也可以在讨论区(https://github.com/vitejs/vite/discussions)或 Vite Discord(https://chat.vitejs.dev/)中与 Vite 团队分享您的发现。


Javascript 优化


编程语言优化自然是其中极为重要的一环,我们在 Vite 4.3 中对 JavaScript 做出了一系列有趣的优化。


用回调替代 *yield


Vite 使用 tsconfck 来查找和解析 tsconfig 文件。在此之前,tsconfck 会使用 *yield 来遍历目标目录,但该生成器的缺点在于需要占用大量内存空间以存储其 Generator 对象,而且在运行时中产生大量生成器上下文切换。为此,tsconfck 作者 @dominikg 从 v2.1.1 开始在核心中用回调替代


yield。


关于更多细节信息,请参阅(https://github.com/dominikg/tsconfck/pull/84/files)。


用 ===替代 startsWith & endsWith


我们还注意到,Vite 4.2 使用 startsWith 和 endsWith 来检查热门 URL 中的标题头和收尾“/”符号。我们比较了 str.startsWith(‘x’) 和 str[0] === ‘x’ 的执行基准,发现 === 比 startsWith 快大约 20%,同时要比 endsWith 快上约 60%。


避免重建正则表达式


Vite 需要大量的正则表达式来匹配字符串,其中大部分是静态的,所以只使用单件(singletons)会好很多。Vite 4.3 就改进了正则表达式功能,使其可以被正确重用。


不再生成自定义错误


Vite 4.2 中包含一些自定义错误,原本希望带来更好的开发体验。但这些错误可能导致额外的计算和垃圾收集负担,进而拖慢 Vite 的速度。在 Vite 4.3 当中,我们决定不再生成某些常见的自定义错误(例如 package.json NOT_FOUND 错误),转而直接抛出原始错误以换取更佳性能。


未来计划


我们计划在今年之内发布 Vite 的下一个大版本,以配合今年 9 月 Node.js 14 与 16 的生命周期结束计划。我们还发起了 Vite 5 的早期讨论与反馈收集通道,欢迎感兴趣的朋友积极参与(https://github.com/vitejs/vite/discussions/12466)。


相关阅读:

Rust、Go 和 Swift 在性能和并发性方面有何差异?

Rust 语言 2022 年度回顾:全球企业如何采用 Rust?

如何使用 rust 写内核模块

性能提升 40 倍!我们用 Rust 重写了自己的项目

2023-04-24 17:425618

评论

发布
暂无评论
发现更多内容

Amazon CTO Werner Vogels:2024年及未来四大技术趋势预测

亚马逊云科技 (Amazon Web Services)

re:Invent AIGC Amazon S3 大语言模型

SDK对比测评|如何科学做直播产品技术选型?

音视频开发_AIZ

音视频 技术选型 直播推流 音视频技术 测评对比

谁说低代码做不了复杂的企业应用?

代码生成器研究

交易所开发:服务为您的企业提供支持

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

全面预算管理平台:让企业管理智慧升级

智达方通

智慧管理 全面预算管理

如何利用item_get接口提供的数据进行商品比较和筛选?

技术冰糖葫芦

API 文档

袋鼠云产品功能更新报告08期|近百项全新功能和优化,你要的都在这里!

袋鼠云数栈

大数据 数据中台 产品更新 产品功能

Kosmos实现无状态工作负载跨集群平滑扩展

畅聊云原生

零束科技:博睿数据是智能化路上的可靠“守护者”

博睿数据

#运维

从HumanEval到CoderEval: 你的代码生成模型真的work吗?

云计算 软件开发 华为云

低代码如何提高生产力?

互联网工科生

低代码 项目开发 JNPF

IT服务外包的优点有哪些?

Ogcloud

外包 IT 外包公司 外包项目 IT 运维

低代码不适合做哪些应用?

代码生成器研究

348字节实现精简版吃豆人小游戏

南城FE

JavaScript 前端 游戏

JNPF低代码平台详解 -- 系统架构

树上有只程序猿

低代码 应用开发 JNPF

拿来就用!6款详细的用户旅程图模板,一键下载!

职场工具箱

模板 用户旅程图

用爱发电,分享快乐,真·免费GM公益服游戏!

echeverra

公益服

自建大数据平台迁移腾讯云EMR最佳实践

腾讯云大数据

EMR

Kosmos介绍

畅聊云原生

RUM增强APP端快照配置全量会话回放与自定义协议网络请求采集功能

博睿数据

如何根据获取到的商品信息制定更加精准的营销策略?

技术冰糖葫芦

API 文档

分布式基础概念-分布式缓存[2]

派大星

Java 面试题

从 Oracle 到 TiDB,全链路数据迁移平台核心能力和杭州银行迁移实践

PingCAP

数据库 数据库迁移 TiDB 银行业

案例解析关于ArkUI框架中ForEach的潜在陷阱与性能优化

华为云开发者联盟

鸿蒙 开发 华为云 HarmonyOS 华为云开发者联盟

技术人的 2023 总结|火山引擎开发者社区联合 InfoQ 写作社区第四届有奖征文获奖公布!

InfoQ写作社区官方

云原生 音视频 火山引擎 热门活动 #大模型

Vite 4.3正式发布,性能提升_大前端_丁晓昀_InfoQ精选文章