8. レンダリングやキャッシュの⽅式が寄与する対象範囲
8
① HTTPリクエスト ② サーバー側の動的処理 ③ HTTPレスポンス ④ ブラウザレンダリング
DNS + TCP
Response
ここが対象︕
DBアクセス
処理
APIアクセス
処理
処理
Loading
Rendering
FCP LCP
TTFB
Request
9. 今回実装した構成について
9
ブラウザ CDN APIサーバー
結論: Next.js で SSR して CDN でキャッシュする構成に
① HTTPリクエスト
② キャッシュが
なければフェッチ
③ GraphQLクエリを
叩いてデータ取得
④ SSR (Sever Side Rendering)
⑦ HTTPレスポンス ⑤ SSRした結果
(HTML / JS / CSS)を返却
⑥ エッジサーバー
にキャッシュ
① HTTPリクエスト
② キャッシュを
そのまま返却
CDNのエッジサーバーに
キャッシュがない場合
CDNのエッジサーバーに
キャッシュがある場合
Webサーバー
リリース時に
キャッシュパージ
CI/CD環境等
レスポンスヘッダーに
s-maxage を付与 ※
+
※ s-maxage とは、CDN層にだけ
キャッシュ時間を伝えるヘッダー
→ 1⽇数回ある物件の次回更新開始⽇時を付与
1回⽬ 2回⽬
リクエスト
s-maxage: 8時間
10. SSRしてCDNキャッシュさせることに⾄った経緯
10
① CSR (Client Side Rendering)
→ ❌: Googleさんが正しく評価してくれないのでSEO観点でNG
(回避策である Dynamic Rendering も Google が明確に⾮推奨に ※1)
② SSG (Static Site Generation)
→ ❌: 数⼗万件の詳細ページをリリースごとや更新タイミングでビルドするのは現実的でない
③ SSR (Server Side Rendering)
→ ⭕: SSR単体だとパフォーマンスに問題あるが、CDNと組み合わせればなんとかなりそう
※1 https://developers.google.com/search/docs/advanced/javascript/dynamic-rendering?hl=ja
Google検索セントラルのページより ※1