2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

特立独行?尤雨溪领衔,Vue 团队开源 Rust 打包工具

  • 2024-03-11
    北京
  • 本文字数:1749 字

    阅读完需:约 6 分钟

大小:825.02K时长:04:41
特立独行?尤雨溪领衔,Vue 团队开源 Rust 打包工具

最近,Vue 团队正式开源了基于 Rust 的打包工具 Rolldown。

 


Rolldown 是一款用 Rust 重新编写的 Rollup 替代品。而 Rollup 使用的是 javascript。

 

Rolldown 具有以下特点:

  • 与 Rollup 兼容

  • 更快的构建速度

  • 更小的输出体积

 

Rolldown 类似于 esbuild,它是一款专注于速度和性能的 JavaScript 构建工具。

 

尤雨溪(Evan You)表示,在捆绑纯 esm 模块时,Rolldown 比 esbuild 快 1.4~2 倍。但这次大家对性能的关注度不太高。反而是 Rust 占了很大一部分的注意力。

 


在前端领域里使用 Rust,到底对不对很难讲,有位网友是这样评价的:“esbuild 基本上是 Evan 的单人项目,所有代码都是为 esbuild 量身打造的。这并不是什么坏事,Evan 独自一人提升了 Node 的捆绑性能,并带领我们走上了使用 Rust 开发工具的道路。其他语言的工具编写库和生态系统正蓬勃发展,例如针对 JS/TS/Node 的 oxc、SWC、LightningCSS、Biome、rslint、Deno、rspack、napi-rs/Neon 项目,以及针对 Python 的 ruff、uv、rattler、pixi 等项目。这些项目带来了大量的库和作者,可以互相分享和帮助。此外,就个人而言,使用比如 Rust 这种语言来编写解析器等工具并没有让它更具工效。”

 

也许 Rolldown 这个例子很好地展现了技术发展的“拐点”。毕竟,几年前,用 Rust 开发 JavaScript 工具被认为不是最优选择。然而,一些特立独行的人并不在意。

 

对于语言的转变,尤雨溪还特地表示“以前主要使用 JS/TS 的 Vue 社区成员,现在能够在 Rust 中做出贡献了。”

 


Rolldown 官网显示,该项目团队成员共有 4 人,现在由 Vue 和 Vite 作者尤雨溪领导。

 


这个项目,也被一些 Vue 粉捧得像“天上有地上无”似的:“Rolldown 可能是未来五到十年间最具份量的 Web 项目。它以领先时代的气魄带来了摇树优化等关键概念。”

 



在 Vite.js 中,Rollup 同样是构建过程的一大基石。大多数 Vite 插件本身就是 Rollup 插件。

而且在诞生后不久,Vite 就成了几乎各类主要元框架的标准开发与构建环境,包括 nuxt.js、solid.js、sveltejs kit、remix.run 乃至 Angular CLI 等(可能唯一的例外就是 Next)。Rollup 同样是这些项目的基石,成功从一种在 npm 上发布捆绑库的方式演化为如今 Web 编写的中流砥柱。

 

现实问题:

从客观来看,我们正身处这样的 Web 开发环境:Rollup 已经被用于构建 Web 上几乎一切服务(虽然与其诞生的初衷不符),而其性能(实际上就是 JavaScript 的性能)仍有提升空间。用 Go 语言编写的捆绑器 esbuild 已经向全世界展示了“原生”捆绑器能有多快,但其除了无法兼容 Rollup 之外,还有其他一系列缺点(例如不支持 TypeScript、摇树优化功能有限等)。

Vite.js 同时使用 esbild 与 Rollup,因此兼具了双方的各自优势,但也引发了新的问题:解析。不同的构建工具会使用不同的 AST 树,且每种工具都必须解析代码以导出 AST。此外,Rollup/Vite 的很多插件还有自己的解析过程。可以想见,如果只需要一次解析就能让所有技术栈的全部层都用上同一个 AST 树,那性能岂不是一飞冲天?

事实证明,Vite.js 往往需要在栈内各层次上把同一个 TS 文件至少解析 5 次,这里的优化空间可谓巨大。

 

解决方案:

Rolldown 项目就是想要彻底解决以上问题。首先,它采用 Rust 编写而成,Rust 正是目前速度最快的语言之一——甚至比 Go(也就是 esbuild)更快,这主要得益于 Rust 没有垃圾收集机制。在某些应用场景下,速度优势可能并不重要,但在解析和编译上下文中则有着非凡的意义(而且讽刺的是,Rust 本身却是世界上最慢的编译器)。

Rolldown 的目标还不止于加快速度,更尝试与 Rollup 实现 API 兼容。这同样是一项巨大的成就,一旦成功,Vite.js 团队相当于能够在飞机航行的过程中更换发动机。

最后、也是 Rolldown 最雄心勃勃的核心目标,就是提供一种标准 singular parse 方法。这虽是个远期目标,但考虑到 Vite 已经广泛普及,再加上 Rolldown 使用 OXC 进行解析,我们最终可能会迎来围绕单一解析和 AST 树建立起的标准化新世界。由此给开发环境和构建速度带来的性能提升将极为可观。

如果成功,Rolldown 将负责转换 Web 代码中的几乎每一个字节,且完全不受大家实际框架的影响。

 

对于 Justin Schroeder 的说法,各位前端大大是怎么看的?欢迎留言评论:)

 

参考链接:

https://twitter.com/jpschroeder/status/1766115866859446477

https://dev.to/justinschroeder/rolldown-why-it-matters-4129

 

2024-03-11 17:529603

评论

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

现代数据平台要实现自助用数,要解决的三个问题

华为云开发者联盟

大数据 后端 华为云 企业号 1 月 PK 榜

【UE虚幻引擎】干货!UE修改分辨率的3种方法

3DCAT实时渲染

游戏开发 虚幻引擎 ue 游戏开发引擎

阿里云化身“智能云管”,助力中国联通首次实现大规模平台自主运维

云布道师

阿里云

来自开发者的点赞,龙蜥社区荣登“2022 中国技术品牌影响力榜单”

OpenAnolis小助手

开源 龙蜥社区 思否 榜单 技术先锋

RTE 领域的发展,为视频编解码标准带来哪些新变化?丨Dev for Dev 专栏

RTE开发者社区

pip安装更换镜像

Geek_7ubdnf

Linux

面试官:什么是自旋锁?自旋的好处和后果是什么呢?

风铃架构日知录

Java 程序员 后端 自旋锁 循环

Linux安装Vue环境

Geek_7ubdnf

Linux Vue

openEuler资源利用率提升之道 05:虚机混部介绍与功耗管理技术

openEuler

数据库 Linux 操作系统 openEuler OpenStack

从状态机的角度async和await的实现原理

C++后台开发

多线程 linux开发 Linux服务器开发 状态机 C++开发

Tapdata Cloud 场景通关系列:集成阿里云计算巢,实现一键云上部署真正开箱即用

tapdata

软件测试/测试开发 | 代码覆盖率集成

测试人

软件测试 自动化测试 测试开发 代码覆盖率

内部分享讲解DevOps后,我再组织成文

MavenTalker

DevOps 研发管理 敏捷实践

定时任务cron

Geek_7ubdnf

Java

Spring+Vue工程部署在Linux

Geek_7ubdnf

Java spring Linux Vue

华为云云筑·开发者年度盛典精彩回顾

华为云开发者联盟

云计算 开发者 华为云 数字人 企业号 1 月 PK 榜

选择LED显示屏电源的7个指南

Dylan

电源电路 LED显示屏 led显示屏厂家

SQL常用语句

Geek_7ubdnf

sql

Java中restTemplate的使用

Geek_7ubdnf

Java

软件测试/测试开发 | 接口测试价值与体系

测试人

软件测试 自动化测试 接口测试 测试开发

本地安装并创建MySQL数据库

Geek_7ubdnf

MySQL 数据库

研讨会回顾 | UI自动化测试现场演示

龙智—DevSecOps解决方案

软件测试 自动化测试 测试软件

聊聊 SpringMVC 是如何工作的?

风铃架构日知录

程序员 springmvc IT springboot

实测 | Apipost和Apifox哪个更好用?

不想敲代码

接口调试 接口管理工具 API接口工具

为什么建议SQL初学者尽量选择Web版SQL工具?

雨果

sql 数据库管理工具 SQL开发

卷扩容业务失败了,在线等…

华为云开发者联盟

开发 华为云 企业号 1 月 PK 榜 卷扩容 磁盘扩容

SpringBoot基础知识

Geek_7ubdnf

Java springboot

4个MySQL 数据同步 Elasticsearch 的方案!

风铃架构日知录

Java MySQL elasticsearch IT 数据同步

GoLang的安装和使用

Geek_7ubdnf

golang

如何使用 Node.js Stream API 减少服务器端内存消耗

华为云开发者联盟

后端 开发 华为云 内存消耗 企业号 1 月 PK 榜

【Unity干货教程】如何实现Unity和Android原生互相调用?

3DCAT实时渲染

Unity 实时云渲染 Unity3D

特立独行?尤雨溪领衔,Vue 团队开源 Rust 打包工具_架构/框架_Tina_InfoQ精选文章