TanStack Redact:一个敢在浏览器里替代 React 的更小运行时

原创
alex 1小时前 阅读数 1 #头条

TanStack Redact:一个敢在浏览器里替代 React 的更小运行时

Redact 是什么:用更小的 API 面替代 React DOM

第一次看到 TanStack Redact 的发布公告,我愣了几秒。一个在浏览器里替代 React 和 React DOM 的东西,不要求你改一行应用代码,只需要加进构建配置,现有的 React 导入、组件、hooks 和依赖就自动用上它了 来源:TanStack。这听起来像是某种偷梁换柱的把戏,但背后的问题很实际:React 的应用代码里,到底有多少东西是真正被用到的?

Redact 的答案是把问题倒过来。它不去实现 React 的全部契约,只实现你应用实际用到的那些 API,然后把这些 API 用更小的运行时做出来。支持 TanStack Start、Vite、Vinext 和 Next.js 四个框架,其中 Vinext 和 Next.js 的场景下 React 留在服务端,Redact 负责浏览器端的 hydration 和渲染 来源:TanStack。这意味着框架的 routing、caching、Server Action transport 仍然归框架管,Redact 只接管浏览器里那一段。

有个细节值得拿出来说。Redact 的渲染是同步的,不包含 React 的时间切片和可中断渲染机制 来源:TanStack。在 React 社区,异步渲染是近几年的主流叙事,一个替代品选择同步渲染,看上去像是技术倒退。但 TanStack 团队显然认真想过了,他们判断:与其模拟 React 的全部调度机制,不如聚焦于应用实际使用的 API 子集,这种“够用就好”的策略让 Redact 在真实站点上验证成功,并吸引了其他生产用户 来源:TanStack。我不确定这个判断在超大应用里是否还能站住脚,但在他们给出的框架组合里,它确实工作。

从个人实验到生产依赖:0.2.0 版本的兼容性里程碑

0.2.0 版本发布时,TanStack 给出的措辞是“stable browser integrations”,覆盖 TanStack Start、Vite、Vinext 和 Next.js,其中 Vinext 和 Next.js 同时覆盖 App Router 和 Pages Router,包括只使用 Pages Router 的应用 来源:TanStack。这个覆盖范围不是凭空来的。作者在写《Projecting React》时明确表示,只希望把 Redact 作为一个小型实验,针对个人网站和 tanstack.com 两个站点保持高度定制,愿意让它非常特定于这两个站 来源:TanStack。

后来实验黏住了。作者自己承认,“实验黏住了,我们最后用得很多”,团队依赖它,其他开发者也在生产环境使用它,因此将其作为长期维护项目是值得的,不再仅是侧面实验 来源:TanStack。这段话读起来很轻,但背后的工程分量不轻。让 0.2.0 版本成为可能的正是兼容性工作:React 的 API 是一个远比“让计数器递增”更大的契约,尤其是加入 hydration、导航、Suspense、表单、乐观更新和框架内部机制之后,团队扩展了覆盖范围并修复了失败,同时把两个运行时包保持在了原有体积限制内 来源:TanStack。

这里有个我没有把握的地方。一个原本为两个站点定制的实验,走到多框架的稳定集成,中间要处理的问题清单里包含 Suspense 和表单,这两块在 React 内部实现里都是出了名难缠的。作者没有细说具体修了什么失败,只说了“我们扩展了覆盖范围并修复了失败”。如果让我猜,最大的坑大概率出在 hydration 和导航的交互上,但我不确定,因为公告里没有展开。

一个反直觉的发现:为何同步渲染反而成为优势

Redact 选择同步渲染而不采用 React 的时间切片和可中断渲染,这看起来是技术倒退,但实际换来了更小的运行时体积和更简单的实现模型 来源:TanStack。作者在公告里没有用“优势”这个词,他只说“Redact 渲染是同步的,所以它不包含 React 的时间切片或可中断渲染”。但结合 0.2.0 的发布,这个选择被证明是可行的:一个小型实验能够被保留、被依赖、被其他生产用户采用,说明同步渲染在真实站点上撑住了。

我查了一下这个项目的社区反应。HN 帖子上只有 1 分、0 条评论 来源:HN。发布当天没有引起讨论,这在 Hacker News 上不算罕见,技术博客的发布经常被淹没。但对照作者自己说的“其他开发者也在生产环境使用它”,这里出现一个反差:社区讨论热度极低,实际采用却存在。我不能确定这个反差有多少是发布时机的问题,多少是标题不够抓人,但至少说明,一个项目的价值不一定体现在 HN 的分数上。

回到同步渲染这件事本身。我的判断是,在浏览器里替换 React 的场景下,同步渲染的收益大于损失,原因是:应用实际使用的 API 子集往往不依赖复杂调度,去掉时间切片换来的体积减少是实打实的,而失去的中断能力在大多数页面里不会造成可感知的性能差异。我不确定这个判断在复杂并发场景下是否成立,但 TanStack 用 0.2.0 的覆盖范围证明了,至少在这些框架组合里,够用就好是成立的。


原文:

TanStack Redact · 来源:Hacker News

作者:itfan123 值班编辑 · 发布于 2026年10月28日

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除