本文へスキップ
MameTechNews
フロントエンド

TanStack、ブラウザ側のReactを置き換えるRedact 0.2を公開

## POINTS

  • 導入はビルド設定だけで、Next.jsではサーバのReactとServer Componentsを残し、ブラウザのハイドレーション以降をRedactに渡す。
  • 小さな同一アプリのgzip合計ではNext.jsが20.4%減、Viteが70.5%減だが、遅延チャンク込みの全体値で、自アプリでの再計測が前提だ。
  • 同期描画のため、Reactのタイムスライシングはない。重い画面では入力遅延が出るので、互換の境界を忙しい画面で確認する。

Tanner Linsley氏は10月26日、TanStack Redact 0.2.0を公開した。ブラウザでReactのAPIを実装し、描画と更新に必要なJavaScriptを減らす。アプリケーションコードは変えず、ビルド設定に足すと、既存のReactのimport、コンポーネント、フック、依存がブラウザではRedactを通る。

対応はTanStack Start、Vite、Vinext、Next.jsだ。VinextとNext.jsはApp RouterとPages Routerの両方で、Pages Routerだけのアプリも含む。サーバ側のレンダリングとServer ComponentsはReactのまま残り、ルーティング、キャッシュ、Server Actionの通信もフレームワークが持つ。Redactが受け持つのはハイドレーションとクライアント描画だけだ。

同梱サイズは、同じ小さなアプリのクライアントJavaScriptとCSSをgzipで合計した値だ。Startは109.3KBが62.3KB(43.0%減)、Viteは68.3KBが20.1KB(70.5%減)、Vinextは138.1KBが98.8KB(28.5%減)、Next.jsは175.6KBが139.9KB(20.4%減)。任意機能を切ると、例ではStartが59.8KB、クライアントだけのViteが12.6KBまで下がる。遅延チャンクを含むビルド全体の数字で、1ページの転送量を保証するものではない。

Vinextのベンチマークを6回走らせた結果は、154.9KBから115.5KBへ39.4KB減った。本番ビルド時間はほぼ同じで、開発時の起動は少し速かった。ブラウザ上の描画速度は測っていない。

Redactは同期描画で、Reactのタイムスライシングや中断できるレンダリングを持たない。中断付きのtransition、保留中のフォーム、楽観的更新は対象だが、重い描画は入力を止め得る。忙しい画面で試し、互換ガイドに書かれた境界を確認する必要がある。