AI·快讯
⚙️ 开源 · 架构升级

Jotai v2.20.0 重写 Store 核心:高吞吐性能优化背后的架构取舍

7月22日,React 原子化状态管理库 Jotai 发布 v2.20.0,核心变化是重新设计了 Store 构建模块,目的是提升高吞吐场景下的性能。这次改动为即将到来的 Jotai v3 铺平道路,但对普通开发者无感——破坏性变更仅影响库作者。

综合公开信息整理 2026-07-22 全文约 3 分钟
#Jotai #React状态管理 #性能优化 #架构重构
v2.20.0 从 v2.12.0 开始历时一年多的演进
92% 性能提升(高吞吐场景,官方基准)
2 后续补丁版本(v2.20.1 / v2.20.2)

⚡ 30 秒速览

  • 改了啥:Store 内部构建模块重写,避免使用 WeakMap 导致性能下降,改为参数传递。
  • 谁受益:高吞吐场景(频繁读写 atom 的应用)性能提升最高 92%;普通 API 无变化。
  • 谁受影响:库作者——破坏性变更,需更新下游包如 jotai-devtools 至 v0.14.0。
  • 为什么做:为 Jotai v3 扫清障碍,v3 将重新设计构建模块数组结构、移除 CJS、停止支持 React 18 以下。
  • 作者说:“不是特别优雅,但符合我的思维模型。” —— Daishi Kato

01版本演进 从 v2.12.0 到 v2.20.0 的架构之旅

Jotai 的构建模块理念最早在 v2.12.0 引入,目的是让生态库(如 jotai-effect、jotai-scope)能够扩展核心能力。当时的方案是暴露内部机制,让库作者在创建 store 时通过配置定制化。到 v2.15.0,这套 API 被认为是“足够灵活且安全”。

但灵活带来了代价:WeakMap 方案导致性能下降。高吞吐场景下,频繁的 WeakMap 查询成为瓶颈。痛点被报告在 Issue #3280 中。

v2.20.0当前版本
🚀 性能优化
v2.15.0API 稳定
灵活安全
v2.12.0构建模块首次引入
实验性

注:横轴表示版本成熟度,非量化指标。v2.20.0 是里程碑,解决了前序版本的性能问题。

02架构变化对比 WeakMap → 参数传递

修复方案非常直接:放弃 WeakMap,改为通过参数传递所有内容。核心贡献者 David Maskasky 实现了这一改动,包括:

#3293移除 getInternalBuildingBlock
#3311onMount Rev3 类型收窄
#3313延迟 hooks 引入

之前(v2.12–v2.19)

使用 WeakMap 实现灵活扩展,代价是每次 store 操作都要查询 WeakMap,高并发场景下性能下降明显。

现在(v2.20.0)

通过参数传递构建模块,避免 WeakMap 查找。作者评价“不是特别优雅,但符合思维模型”。

注:普通开发者 API 无任何变化,创建 store 方式与之前完全一致。仅影响使用内部构建模块的库作者。

03社区反响 平静水面下的暗流

对于这个小版本更新,直接反响较为平淡——毕竟对大多数用户来说什么也没变。但围绕 Jotai v3 的长期规划引发了贡献者讨论,尤其是关于移除 CommonJS 的提议。

“移除 CJS——我认为这甚至不应该成为一个问题。99.9999% 的 Jotai 用户都在使用某种构建工具,而所有这些工具都很好地支持 ESM。”

—— 一位贡献者在相关讨论中表示

但作者 Daishi Kato 回应指出,仍需考虑服务端渲染用户的需求。对于降低 Jotai 与 React 的耦合、吸引其他框架用户的建议,他明确表示坚持 React 优先的立场。

📦 下游生态适配 已更新

  • jotai-devtools v0.14.0 增加对 INTERNAL_buildStoreRev3 的支持,移除了旧版本。
  • 仍使用 Jotai v1 的团队应参考官方 v2 迁移指南。
  • 依赖 atomFamily 的用户注意:该功能已被弃用,v3 将推荐使用 jotai-family 包。
兼容性影响:仅限库作者;普通应用零改动。

04为什么这么做?为 Jotai v3 扫清道路

Kato 在《Read the Code》newsletter 中解释,这次改动是他开始认真思考 Jotai v3 之前的最后一步。v3 规划已明确包括:

重新设计构建模块数组结构
核心
移除 CommonJS 构建
有争议
停止支持 React 18 以下
计划
移除 setSelf 选项
清理

注:竖线长度表示该变更在 v3 中的优先级(非量化)。移除 CJS 因 SSR 需求仍在讨论中。

一个诚实的注脚:

虽然 Jotai 在 atom 状态管理领域领先,但原始下载量落后于 Kato 自己创建的 Zustand。Jotai 采用自底向上的 atoms 模型(类似 Recoil),而 Zustand 提供单一自顶向下的 store(接近 Redux)。两者满足不同思维模型,没有绝对的优劣。

编辑核心判断

底层架构的每一次重构,都是对「灵活性与性能」平衡的重新校准。Jotai v2.20.0 证明:当灵活性开始拖累性能时,果断放弃优雅的 WeakMap 方案、回归参数传递,是务实的工程选择。v3 的规划更值得关注——它可能决定 Jotai 是成为下一个 Recoil 还是下一个 Redux。

现在就能用

Jotai v2.20.0 已发布至 npm,通过 npm install jotai@latest 即可升级。现有项目无需修改代码。

npm 安装 jotai@latest