- Webエンジニア
- アウトバウンド営業
- Webエンジニア(リーダー)
- 他17件の職種
- 開発
- ビジネス
弊社エンジニアの記事になります。
はじめに
今回は Next.js の App Router で使えるキャッシュの理解をざーっと深めていきたいと思います!
というのも App Router で Pages Router より細かなキャッシュ戦略を使用することができそうだとは思っていたのですが、細かくどんなことができるのかまでは確認していませんでした。
最近リリースされた Next.js v14.1 では、今まで各 Next.js サーバーのファイルシステム(ディスク)にしか保存することができなかったキャッシュの保存先を、Redis や AWS S3 などに設定することができるようになりました。そのため、クラウドサービスを使用したサーバーインスタンス数をスケールアウトさせるケースなどにも各インスタンス間でキャッシュを共有することが可能になりました。
このようにNext.jsでのキャッシュ周りの利便性が高くなってきていますので、今一度 Next.js の App Router で使用できるキャッシュをまとめてみようと思います!
App Router で使用できるキャッシュの種類は4種類
App Router で使用できるキャッシュの種類は下記4つになります。( Next.js 公式サイトから抜粋 )
MechanismWhatWherepurposeDurationRequest MemoizationReturn values of functionsServerRe-use data in a React Component treePer-request lifecycleData CacheDataServerStore data across user requests and deploymentsPersist (can be revalidated)Full Route CacheHTML and RSC payloadServerReduce rendering cost and improve performancePersist (can be revalidated)Router CacheRSC PayloadClientReduce server requests on navigationUser session or time-based
それぞれ、クライアントでのキャッシュかサーバー側でのキャッシュかで分かれています。
では一つずつ確認していきましょう。
Request Memoization
これは 1 サーバーリクエストごとのキャッシュになります。
1 サーバーリクエスト間で複数回、React Component Tree の様々な場所で同じ URL に同じオプションで fetch リクエストを行っていても、React が fetch の結果をキャッシュしてくれるためキャッシュ生成後のリクエストは全て実際にリクエストを飛ばさずキャッシュの値を自動的に使用してくれます。そのため、パフォーマンスのことを考えて Top のコンポーネントからリクエストを飛ばし、そのデータを実際に使用する子コンポーネントに橋渡ししていくなどといった必要がなくなります。
そして 1 サーバーリクエスト間でのキャッシュであるため、レンダリングが完了すると全ての Request Memoization はクリアされます。
*注意
Request Memoization は fetch
を使用した GET
リクエストにしか適用されません。
(Graphql クライアントなどを使用していて fetch
を利用していない場合、react の cache
function を使用することでデータのキャッシュが行えます。)
Request Memoization の流れ
( Next.js 公式サイトから抜粋 )
キャッシュの無効化
AbortController
の signal
を使用することで、キャッシュを無効化できます。
const { signal } = new AbortController()
fetch(url, { signal })
Data Cache
Data Cache は fetch を利用して取得したデータを、Next.js サーバーへのリクエスト、デプロイメント間に渡ってキャッシュ化し永続化します。デプロイメント間に渡って永続化されるというのは、ビルドを行なって新しいバージョンを作成したとしても、キャッシュのデータは引き継がれるということです。
…
記事の続きは下のリンクをクリック!
https://rightcode.co.jp/blogs/45465
エンジニア積極採用中です!
現在、WEBエンジニア、モバイルエンジニア、デザイナー、営業などを積極採用中です!
採用ページはこちら:https://rightcode.co.jp/recruit
社員の声や社風などを知りたい方はこちら:https://rightcode.co.jp/blogs?category=life
社長と一杯飲みながらお話しませんか?(転職者向け)
特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk
もっとワクワクしたいあなたへ
現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「営業」などを積極採用中です!
ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。
有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。
- もっと大きなことに挑戦したい!
- エンジニアとしてもっと成長したい!
- モダンな技術に触れたい!
現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?
ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。
- ライトコードの魅力を知っていただきたい!
- 社風や文化なども知っていただきたい!
- 技術に対して熱意のある方に入社していただきたい!
一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。
【コーポレートサイト】https://rightcode.co.jp/
【採用募集】https://rightcode.co.jp/recruit(こちらからの応募がスムーズ)
【wantedlyぺージ】https://www.wantedly.com/companies/rightcode