【10章】Next.jsのチュートリアルをやってみた

Next.js

 

これはNext.jsの公式チュートリアルの10. Partial Prerendering (Optional) に関するメモです

Partial Prerendering は Next.js 14 で追加された新しい機能です
動作が安定するまで、本番環境では慎重に使用してください

 

前章のメモ

 

Next.jsの公式チュートリアルの該当ページ

 

Learn Next.js: Partial Prerendering | Next.js
An early look into Partial Prerendering and how it works.

 

学ぶこと

 

  • Partial Prerendering とは何か?どう機能するのか?

 

静的レンダリング vs 動的レンダリング

 

WEBアプリではアプリ全体もしくはページ全体に対して、静的or動的 どちらのレンダリングにするか選択。

Next.jsにおいては動的関数を呼び出すとページ全体が動的レンダリングに。

動的関数とは、、、
リクエスト時の情報を受け取る cookies(), headers(), searchParams のこと。
 
公式ドキュメント
server-components#dynamic-functions
route-handlers#dynamic-functions

 

ただ、アプリケーションによっては部分的に静的(もしくは動的)レンダリングにしたいときがある

例えば、ECサイトであれば

  • 商品情報は人によらないので静的レンダリング
  • ユーザへのオススメ商品は人によるので動的レンダリング

とか。

 

こういった要件を満たすにはPartial Prerendering を使っていきます

 

Partial Prerendering とは何か?

 

Next.js 14で導入された静的レンダリングと動的レンダリングを同時に使えるレンダリング。

静的レンダリングはすぐに表示され、動的レンダリングは非同期に並列でストリーミング

 

先ほどの例だと、同じページ内で

  • 商品情報は人によらないので静的レンダリング
  • ユーザへのオススメ商品は人によるので動的レンダリング

と使い分けられる

 

Partial Prerenderingの実装と仕組み

 

Partial Prerendering(PPR)を実装する方法を見ていきましょう

 

まずは、next.config.js にオプションを追加します

 

今回は ppr: ‘incremental’ としたので使いたいページで experimental_ppr を true します

ダッシュボード画面に適用させたいので、/app/dashboard/layout.tsx へ。

 

これでPPRを実装できました。

既存のコードを変えることなく、オプションや変数を少し追加するだけでPPRは使えます

 

PPRを使用しているページでは

  • Suspenseで囲まれている ⇒ 動的レンダリング
  • それ以外          ⇒ 静的レンダリング

になります。つまり、Suspenseを基準にNext.jsが勝手に静的 or 動的を判断してくれます

 

ただ、これはアプリをビルドする際に見ることができます

早速、ビルドしてみましょう。

/dashboard がPartial Prerenderと判断されています

 

ちなみに、こちらがPPRを使用していないときのビルドログ。

/dashboard が動的レンダリングと判断されています

 

 

PPRの実装部をコメントアウトしておく

 

Next.jsのCanaryバージョン出ないとビルドできないため、

PPRに関するコードをコメントアウトしておきます

 

 

 

まとめ

 

ここまで、データの取得を最適化する方法としていろいろ見てきました

  1. レイテンシを削減するためにサーバーとデータベース間を同じリージョンに作成。
  2. React Server Components を使用してサーバー上でデータを取得することでクライアント側の負荷を減らす+機密情報がクライアントに公開されない
  3. SQL を使用して必要なデータのみを取得。
  4. データ取得を並列で処理する
  5. ストリーミングを実装することですべてが読み込まれるのを待たずに操作できる
  6. ページ内で静的 or 動的レンダリングを使い分ける

 

次章のメモ

 

コメント

タイトルとURLをコピーしました