以下为尤大大的大会远程分享内容解读
时间: 2025.3.8
会场:十九届D2终端技术大会( Mobile Developer & Frontend Developer Technology Conference, 简称 D2 由阿里巴巴终端技术委员会创办,面向全球终端开发领域技术人,立志于促进业内交流、引领终端技术发展)
关注点: Vite Plus ! “cargo for JavaScript”
结尾附视频以及PPT
一、Vite历史😎
二、 Vite的现状😎
vite的下载量即将来到1个小目标/月
除nextjs,其他主流元框架(Meta-Framework)均使用了vite作为构建工具
Vite 已经成为了下一代 web 应用的 <共享基建层> 💐💐💐
三、 Vite并不完美😵
依赖的底层框架有很多问题:↓
1. esbuild (依赖预打包 TS / JSX 转译 压缩)
● 产物控制太弱(尤其是拆包)
● 插件系统局限性大
● 没有 HMR,也不支持 React fast refresh 转译
2. Rollup(插件生态 生产环境构建 拆包/产物优化)
● 比起原生语言写的 bundler 来说太慢了
3. SWC (React HMR 转译 压缩)
● Binary 太重
● Bundler 不可用
存在的问题:
- 打包行为的微妙不一致 (主要是 ESM/CJS interop 的处理) : esbuild + rollup
- 效率问题:多次重复 parse / transform / codegen且在 js / native 之间传递字符串 : esbuild+ rollup + swc
- Unbundled ESM 在请求数量巨大 时的性能瓶颈: esbuild + rollup + swc
四、 开发Rolldown 🐂🍺
1. Vite 面对的问题其实是 整个 JS 工具生态一直存在的问题的缩影
2. JS 工具生态在每一个层面
● Parsers: babel / acorn / esbuild / espree / flow / TS / swc / uglify-js
● Transformer: babel / esbuild / swc / sucrase / TS
● Test runner: mocha / jasmine / tape / ava / jest
● Linter: jshint / eslint / biome
● Formatter: prettier / eslint
● Bundlers: webpack / rollup / esbuild / parcel
● Monorepo tools: nx / turborepo / rush / lerna / lage / wireit都非常的碎片化
四、开发void(0) 🐂🍺
碎片化导致的种种问题
● 选择困难 + 复杂度爆炸
● 一些工具互相根本不兼容
● 不同工具反复 parse / 编译导致的浪费
● 重复却又各不相同的配置
● 转译/模块解析等行为不一致
● 大量时间浪费在搭配和调试工具链上
为什么是现在?
- 生态中各个层面的需求在过去十年中已经逐渐清晰,只是方案 难以被统一。
- 统一需要共识,而 Vite 展现出了 web 生态中前所未见的共识达成速度,提供了一个很有希望的
基础。 - Rust for JS 的生态地基有前人探路,也已 经趋于成熟。
解决碎片化开发统一的工具链 :void(0)
下一代的 JS 统一工具链 → void(0) ✨✨✨
官网地址: voidzero
架构图
为什么是 Rust?
● 极限性能和内存安全之间的平衡
● 已经有一个相对成熟的 for JS 开发者生态
○ 更容易找到贡献者
○ 成熟的 JS bindings (napi-rs)
○ 成熟的 Web Assembly 支持
● 注意:我们并不打算锈化所有东西
○ CLI / API 等需要灵活迭代的东西还是用 TS
○ 需求明确稳定,性能关键的部分用 Rust
目前的进展
一些小细节
● OXC 围绕 arena allocator 做的内存管理优化
● Rolldown 基于 Rollup 插件 API 增加 filter,避免 JS 调用开销
● Rolldown 在 JS 侧对插件 hooks 进行合并
● OXC 研发中的 0-cost AST transfer
● 基于 0-cost AST transfer 的轻量级 JS transform / lint API
五、What is next 🍺
不出意外,年底Vite Plus即将发布! 让我们拭目以待!
附:
→ 以上 🐒