尤雨溪之后,前端圈又一个值得关注的工具链来了:Yuku

0 阅读4分钟

过去几年。

前端工具链几乎进入了 Rust 时代

从 SWC、Rspack、Turbopack、Rolldown,到 Oxc…… 越来越多项目开始用 Rust 重写。

原因只有一个:性能。

就在最近,一个用 Zig 写的 JavaScript 工具链,开始在开发者社区刷屏。

作者甚至公开表示:

Yuku 已经比 Oxc 更快。

如果你最近刷到这个名字。

别怀疑,它就是今天要聊的主角:Yuku

官方地址:yuku.fyi/

GitHub: github.com/yuku-toolch…

很多开发者第一次看到后都会问:Zig 做前端工具链?还能比 Rust 快?答案可能真的出乎你的意料。

又一个 Oxc?

第一眼看到 Yuku,很多人的反应都是:又一个 Parser? 或者:又一个 Babel 替代品? 其实都不准确。

官方给它的定位是:

一个使用 Zig 编写的高性能 JavaScript / TypeScript Compiler Toolchain。

注意,不是 Parser,不是 Formatter。

而是:

Parser
+
Analyzer
+
Codegen
+
Compiler Toolchain

目标很明确:打造完整的新一代 JavaScript 基础设施。

为什么大家突然开始关注它?

原因只有一个:快。

最近作者公开分享了一组基准测试,直接把大家看懵了。

官方表示:在 Native Benchmark 下。

Yuku 已经超过:

  • Oxc
  • SWC

在 npm 环境下,相比主流解析器。

速度可以达到 3 ~ 10 倍

甚至作者还专门发文解释:为什么某些 npm 场景下,Oxc 会比大家想象得慢,原因并不是 Parser 本身。而是:Rust 与 JavaScript 之间 AST 传输产生了额外开销。

而 Yuku 从设计之初,就把 AST 做成了更适合跨语言传输的数据结构。

它为什么这么快?

官方把原因总结成一句话:Data-Oriented Design(数据导向设计)。

什么意思?简单理解就是:不是围绕对象设计,而是围绕 CPU Cache 设计。

尽可能:

  • 连续内存
  • 更少分配
  • 更少跳转
  • 更少缓存失效

这种思路,其实近年来很多高性能项目都在采用。

例如:

  • 游戏引擎
  • 数据库
  • 编译器

而 Yuku 几乎把这种理念贯彻到了整个工具链。

不是只有 Parser

很多项目,只有 Parser。而 Yuku 已经开始布局完整生态。

目前已经包含:Parser

支持:JavaScript、TypeScript、JSX、TSX

输出兼容:ESTree / TS-ESTree AST。

Codegen

官方提供:

print()

strip()

minify()

不仅可以重新生成代码,还能:去除 TypeScript 类型、压缩代码、同时生成 Source Map

官方数据显示,开启 Source Map 时。

速度约为 Babel Generator 的 2.5 倍

Analyzer

这是很多人最惊喜的部分。

Analyzer 内置:

  • Scope
  • Symbol
  • Reference
  • Closure
  • Module Linking

也就是说,它不仅知道:

变量在哪声明

还能知道:

变量在哪里引用

属于哪个作用域

来自哪个模块

官方表示,这一部分相比传统方案,最高可达到 15 倍性能提升

对 TypeScript 支持非常完整

官方特别强调,Yuku 并不是:能解析 TS 这么简单。而是完整支持现代 JavaScript 特性。

包括:TypeScript、JSX、TSX、Decorators、using、await using、Source Phase Imports、Deferred Imports 等等。

对于未来 ECMAScript 新特性,也保持持续跟进。

最狠的是测试

很多工具——快,但是兼容性一般。

Yuku 反而把:Correctness(正确性) 放到了第一位。

官方介绍:Parser 每天同步测试数据。

测试集来自:Test262、TypeScript Compiler、Babel 累计数万条测试用例。

目前:零失败零 AST 不一致

这意味着:它不是为了 Benchmark 而快,而是在保证规范兼容的前提下追求性能。

Zig 为什么开始进入前端?

过去几年,Rust 几乎统治了前端基础设施。

例如:SWC、Oxc、Rspack、Turbopack、Rolldown

但 Zig 正开始成为另一股力量,原因很简单,很多开发者认为 Zig 拥有:更简单语言设计、更低抽象成本、更好的内存控制、更强编译期能力 非常适合编译器

而 Yuku,正是目前 Zig 阵营最有代表性的 JavaScript 基础设施之一。

它会挑战 Oxc 吗?

目前来说,还谈不上。

因为 Oxc 已经拥有:

  • Linter
  • Formatter
  • Transformer
  • Minifier
  • Language Server

整个生态更加成熟。

但 Yuku 已经证明了一件事:Zig 同样可以构建顶级 JavaScript 工具链。

未来几年,我们看到的竞争可能不再只是:

Rust vs Rust

而会变成:

Rust vs Zig

这对整个 JavaScript 工具链生态来说,未必是坏事,竞争越激烈,开发者受益越多。

最后

过去十年,JavaScript 工具链一直由:Babel、TypeScript、ESLint主导。

如今,新的基础设施正在快速迭代。Rust 没有停下、Zig 也开始发力、Yuku 或许还很年轻,GitHub Star 也远没有 Oxc 那么高。但它已经展示了一个值得关注的方向: 重新思考 JavaScript 编译器该如何设计。

如果你正在关注:

  • JavaScript Compiler
  • TypeScript
  • Zig
  • Oxc
  • 新一代前端工具链

那么 Yuku 值得加入你的收藏夹。

GitHub: github.com/yuku-toolch…
官方文档: yuku.fyi/


各位互联网搭子,要是这篇文章成功引起了你的注意,别犹豫,关注、点赞、评论、分享走一波,让我们把这份默契延续下去,一起在前端的海洋里乘风破浪!