Rust 再次打败 Go,Astro 7 首发,什么叫“万物皆可锈化“!

👇 今日要闻

打破信息壁垒,走近全球前端。Hello 大家好,我是林语冰。

Rust 直译为" ",用 Rust 重写其他语言的软件被戏称为"锈化"(Rustify)。

前端基建中,原本基于 Go 的技术栈也逐渐被 Rust "锈化",Rust 越来越有对 Go 语言"降维打击"的趋势了:

  • Node 之父早期用 Go 语言开发 Deno 原型,后来 Deno 直接改用 Rust
  • Turborepo 早期基于 Go 语言,后来重构为 Rust 移植版
  • Vite 7 构建基于 Go 语言的 esbuild + rollup,Vite 8 改用 Rust 实现的 Oxc + Rolldown

现在,Astro 团队官宣第 7 个主版本正式发布,最大的升级就是原本使用 Go 实现的编译器也"锈化"为 Rust 重写的编译器了......

Markdown 引擎和编译器的极致性能就是 Astro 7 的最大版本亮点,本期一起来看看 Rust 是如何"锈化" Astro,使其成为 史上最快 的版本吧。

👉 新型 Rust 编译器

Astro 7 采用了 Rust 重写的新型编译器,取代了之前基于 Go 语言实现的编译器,高性能地编译 .astro 格式的组件。

Rust 编译器底层基于尤雨溪公司的 Oxc 编译器,并使用 Lighting CSS 处理 CSS 作用域,这是 Vite 未来默认会采用 CSS 预处理器,这些都是已经被 Rust "锈化"的工具。

目前新型的 Rust 编译器基本向后兼容旧版的 Go 编译器,除了下列几种特殊情况:

  • 不再进行 HTML 纠错:Go 编译器会通过重排元素等方式将标签隐式重写为"有效的 HTML",这些意外操作常常导致难以 debug 的 bug,Rust 编译器会直接处理
  • JSX 严格模式 :诸如 <div class="text-white >Astro 之类的未闭合标签和未终止属性,Rust 编译器现在会报错,而不是像 Go 编译器那样隐式纠错后,忽略这些真正的模板 bug
  • JSX 空格处理:元素之间的空格现在遵循 JSX 约定被折叠,与 React 和其他 JSX 框架的行为保持一致

举个栗子,行内元素之间的换行符不再产生可见的空格:

Rust 编译器也借鉴了 Rolldown 的模式,为不同平台发布原生二进制文件,提供 WASM(Web 汇编)回退方案。

👉 Rust 驱动的 Vite 8

Astro 7 从 Vite 7 升级到了 Vite 8,这是 Vite 的一个革命性版本,因为 Vite 8 底层集成了基于 Rust 实现的 Rolldown + Oxc,取代了 Go 实现的 esbuild + rollup。

Rolldown 的插件系统兼容 rollup API,但速度提升了至少 10 倍,最高可达 30 倍。

Vite 8 包含了一个兼容层,能将旧版 esbuildrollupOptions 配置自动转换为 Rolldown 的等效配置。

因此,Astor 7 采用 Vite 8 之后,大多数项目无需更改配置就能无缝升级,直接享受更快的构建速度。

👉 Markdown 锈化

前端基建使用 Rust 重写或许见怪不怪,现在更通用的开发技术栈也开始"锈化"了。

Astro 7 默认采用了 satteri 作为 Markdown 和 MDX 的处理管道,这也是一个基于 Rust 的处理器。

在底层,satteri 使用 pulldown-cmark 解析 CommonMark 通用 Markdown 语法,使用 Oxc 解析 MDX 扩展表达式,这些全部都是 Rust 原生库,性能惊人。

但性能并非唯一的优势,原本某些可插拔的功能也直接使用 Rust 实现为内置功能,比如 GitHub 风格的 Markdown 语法,不再需要额外的插件。

对于非默认的功能,可以在 astro.config.js 中自己配置是否启动:

此外,Astro 的 Markdown 处理管道原本基于 unified,其中涉及 remark 和 rehype 等 Markdown 生态的插件,这些插件目前尚未全部使用 Rust 重写。

但可以使用 satteri 的插件 API 实现,或者使用原本的 JS 处理管道:

实际上,Astro 的新型 Rust 编译器带来的性能提升还不是重点,作为 GitHub 前五的 SSG(静态站点生成器),Markdown 生态的锈化提升的性能有过之而无不及。

以构建 Astro 官方文档为例,单独来看,新型的 Rust 编译器的构建速度比旧版 Go 编译器提升了约 6%,因为 .astro 的编译一般不会成为性能瓶颈,而大量 Markdown 的处理才是真正的性能杀手。

现在,Astro 的 Markdown 处理器也锈化了,联手 Rust 编译器,两者的性能叠加就更加明显。而且,随着网页规模的扩大,使用 Markdown 越多的网站,性能提升越明显。

👇 重点总结

Astro 团队官宣 Astro 7 正式发布,其中大量 Go 和 JS 的基建使用 Rust 重写"锈化",使其成为了 Astro 进化史上的 最快版本

  • 新型 Rust 编译器取代了基于 Go 语言的旧版编译器
  • Astro 从 Vite 7 升级到 Vite 8,基于 Rust 的 Rolldown + Oxc 取代了 Go 语言实现的 esbuild + rollup
  • 使用 Rust 实现的 satteri 作为默认的 Markdown / MDX 引擎,部分可插拔功能直接使用 Rust 重写为内置功能

Rust 工业革命还在继续,这不仅发生在 JS / TS 相关的前端基建,也蔓延到了基于 Go 等其他语言更广泛的开发技术栈,榨干原生性能,为程序员提供极致丝滑的开发体验。

未来前端基建的主流或许不再是"Go vs Rust",而是"Go to Rust"(万物皆可锈化)。

👍 以上就是本期《前端日报》的全部内容了,如果读完对你有所帮助,可以按赞打卡、在看推荐或转发分享。

🙏 已经关注我的粉丝们,我们下期再见啦,掰掰~~

👇 参考文献:

相关推荐
lichenyang4531 小时前
H5 如何调用 ArkTS:JavaScriptProxy、requestId 和 Promise 回调
前端
lichenyang4531 小时前
我在 HarmonyOS 上写了一个轻量级小程序运行时:从 Web 容器到 JSBridge
前端
雪隐1 小时前
用Flutter做背单词APP-02我画了设计稿,然后让AI帮我设计了数据库(顺便聊了会天)
前端·人工智能·后端
lichenyang4531 小时前
不要把 JSBridge 写成 if else:Dispatcher、Registry 和 Biz/Imp 分层
前端
前端甜糖1 小时前
前端如何实现在线预览office常见文件功能?
前端·vue.js
北鸟南游1 小时前
学习-claude code 工程化实战的笔记
前端·ai编程·claude
Kyrie6781 小时前
TypeScript 7.0 正式发布
前端
lichenyang4531 小时前
JSBridge 不是发消息就完了:runJavaScript、Timeout 和 Callback Lost
前端
xiaofeichaichai1 小时前
Vite配置实战
前端