返回

gt-react@11.0.0

Ernest McCarter avatarErnest McCarter
gt-reactgt-nextgt-react-nativegt-tanstack-starti18nperformance

概览

gt-react 11 是我们 React 库中一次协同推进的 General Translation 版本发布的核心。gt-reactgt-next@generaltranslation/react-coregt-react-nativegt-tanstack-start 都已升级到 11 版,同时 gt-i18n 升级到了 1.0,generaltranslation 升级到了 9.0。

此次发布有两个目标:让 i18n 运行时更容易扩展到更多框架,并减少随产品一同交付给用户的 General Translation 代码量。最终形成的是一套共享基础,同时为纯浏览器应用和服务器端渲染应用提供了更清晰的设置流程。

原生支持 Pages Router

v11 中面向用户的最大变化是,gt-next 现在直接支持 Next.js Pages Router。此前,Pages Router 应用必须使用 gt-react。现在,它们可以使用 withGTServerSideProps() 加载区域设置和翻译快照,然后在 _app.tsx 中将这两者传递给 <GTProvider>

v11 系列版本还新增了基于 middleware 的区域设置路由以及用于静态生成的 withGTStaticProps()

更新后的设置流程

  • React SPAs - 在应用加载前,使用 initializeGTSPA() 初始化 gt-react。初始化器会预先解析区域设置和翻译,因此 SPA 不再需要 provider。请参阅 React SPA Quickstart
  • 服务器端渲染 React - 先初始化一次运行时,然后在服务器上解析请求区域设置和翻译快照。将 localetranslations 一并传递给 <GTProvider>,以实现同步 hydration。请参阅 server-rendered React Quickstart
  • TanStack Start - 在根加载器中解析区域设置和翻译快照,然后将两者传递给 <GTProvider>。所选区域设置也会通过已配置的区域设置 cookie 持久保存。请参阅 TanStack Start Quickstart

更小、更易扩展的运行时

Version 11 移除了客户端应用不需要的代码,并让这些包更容易被打包工具进行 tree-shaking。仅用于开发的翻译路径也可以从生产构建中剔除。

在我们的生产 Next.js 基准测试中,归因于 GT 的客户端 JavaScript 大小从约 251 KB 降至 108 KB:减少了 57.1%。这里衡量的是客户端 bundle 中属于 General Translation 的部分,而不是整个应用程序的 bundle。你可以在 Odysseus Bundle Size Tracker 中查看包和入口点数据。

这次重构也为支持更多框架奠定了统一的基础。

后续计划

我们计划继续缩减客户端 bundle。接下来,我们希望将 dictionary 翻译和开发时 hot reload 等功能模块化,让应用只包含其实际使用的功能。

我们还计划进一步依赖 compiler 驱动的架构。将更多工作放到 build time 而不是运行时,应该能减少客户端 JavaScript 体积和运行时开销,同时也更容易支持更多框架。

链接