1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Next.jsのプリフェッチの挙動 ~ App Router編 ~

Last updated at Posted at 2025-12-07

はじめに

この記事は以下記事の App Router の場合の記事です。

SSG と SSR、プリフェッチについての説明はこの記事では割愛します。

https://qiita.com/mattsu_mocha/items/c84a75ff4c50402c37d8

※ 元々 proxy.ts を入れたら App Router でも挙動が変わる想定で Pages Router の記事は書いていましたが、実際は変わらなかったので記事タイトルは変えています。

前提

この記事は以下の環境での説明になります。

  • Next.js(App Router) 16.0.7
  • TypeScript

プリフェッチのトリガー条件

App Router でも <Link> のデフォルトはビューポート進入に加えてホバー等でもプリフェッチします。prefetch={false} を指定したときだけ、ビューポート・ホバーのどちらでもプリフェッチされなくなります。

SSG と SSR のプリフェッチ対象

Pages Router と異なり、App Router の場合はプリフェッチされるデータの中心が、ビルド時 JSON から RSC Payload (React Server Component Payload) に置き換わっています。

RSC Payload には、サーバー側で取得・レンダリングされた静的なデータやコンポーネント構造が含まれており、これを先読みすることで、クリック時のハイドレーションが非常に高速になります。

SSG の場合

コード (JSチャンク) と合わせて、ビルド済みでキャッシュされている RSC Payload がプリフェッチされます。クリック時はプリフェッチ済みの RSC が即座に使われるため、待ち時間はほとんど発生しません。

スクリーンショット 2025-12-07 22.09.38 1.png

SSR の場合

コード (JSチャンク) に加え、loading.tsx が存在する最も近いルート階層までの RSC ツリーがプリフェッチされます。完全に動的な階層で loading.tsx が無い場合は、過剰なデータ取得を避けるためコードのみが先読みされ、RSC Payload はクリック時に生成されます。

スクリーンショット 2025-12-07 22.10.03.png

prefetch 属性

prefetch 属性には以下の3つを指定できます。

  • "auto"/null/undefined(デフォルト):SSG はコード+フル RSC、SSR は最寄りの loading.tsx までの RSC をプリフェッチする
  • true:ルート階層全体の RSC データを強制的にプリフェッチし、動的階層でもフルツリーを取得する
  • false:ビューポート検知・ホバーの両方でプリフェッチを無効化し、クリック時にのみリソースを取得する

まとめ

  • App Router の <Link> デフォルトはビューポート+hover でプリフェッチし、prefetch={false} の時だけ無効化される
  • SSG ページはコードとキャッシュ済み RSC Payload、SSR ページは loading.tsx までの RSC(なければコードのみ)をプリフェッチする
  • prefetch 属性の指定値("auto"/true/false)で、取得する RSC の範囲やトリガーを細かく制御できる
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?