Open24

Next.js App Router / Router Cache をしらべる

mugimugi
mugimugi

The React Server Component Payload is stored in the client-side Router Cache - a separate in-memory cache, split by individual route segment. This Router Cache is used to improve the navigation experience by storing previously visited routes and prefetching future routes.

DeepL: React Serverコンポーネントのペイロードは、クライアントサイドのルーターキャッシュ(個々のルートセグメントごとに分割された個別のメモリ内キャッシュ)に保存されます。このルーターキャッシュは、以前に訪問したルートを保存し、将来のルートをプリフェッチすることで、ナビゲーション体験を向上させるために使用されます。

mugimugi

RSC Payloadを持つ。静的に描画されたもののみが対象。

mugimugi

実装はどこか?

mugimugi

canary # ebebb6a96a7988d3dd7f80f117bf9143497298c2 で調べる

mugimugi
mugimugi

createRouterCacheKey は一体何だったのか

mugimugi

定義箇所は OuterLayoutRouter であり次のコメントが有る

/**
 * OuterLayoutRouter handles the current segment as well as <Offscreen> rendering of other segments.
 * It can be rendered next to each other with a different `parallelRouterKey`, allowing for Parallel routes.
 */

OuterLayoutRouter は、現在のセグメントと、他のセグメントの <Offscreen> レンダリングを処理します。
別の parallelRouterKey で隣り合ってレンダリングすることができ、パラレルルートを可能にします。

Parallel Route で使う?

mugimugi

このキーで操作されるのは、同じ useReducer で管理される state 内の cache

https://github.com/vercel/next.js/blob/ebebb6a96a7988d3dd7f80f117bf9143497298c2/packages/next/src/client/components/router-reducer/router-reducer-types.ts#L246-L251

そしてコメントには次のように書いてある

DeepL: キャッシュは、画面に表示されるすべてのセグメントと、以前に表示されたセグメントのReactノードを保持します。
進行中のデータリクエストも保持する。
プリフェッチされたデータはprefetchCacheに別途保存され、ACTION_NAVIGATE中に適用される。

mugimugi

prefetchされてるものと今現在まさに表示しているものは分離して管理されてるという話らしい

mugimugi

state.cache の参照箇所を見てると、

  • cache.subTreeData
  • cache.parallelRoutes

が値として入るぽい。後者は名前から明らかに parallelRoutesでの利用。
前者は?

mugimugi

単純にツリー構造をネストして保持するためのものっぽい