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?

More than 3 years have passed since last update.

Client Side Rendering(CSR) / Static Site Generation (SSG) / Server Side Rendering (SSR)

1
Posted at

CSR

スクリーンショット 2021-08-29 12.05.35.png

概要

  • ブラウザがサイトにアクセスすると、<script>要素だけ書いた、中身が空のHTMLを返す
  • JS読み込み、APIでデータ取得(ページは表示されない)
  • データが出揃ったらReactなどでDOMをレンダリングする

メリット

  • クライアントサイドで動くことだけを考えれば良いので実装が単純
  • HTMLとJSなどの静的ファイルを返せばいいので動的なサーバーの運用コストがない
    • 動的なURLをHTMLに向けるためのルーティングは必要(SSGより面倒)

デメリット

  • 初期表示のパフォーマンスが出ない
  • JSが実行できないクライアントが内容を読めない
    • SEOの問題は少ない(検索エンジンのクローラーがJS実行できるようになった)
    • OGPが生成できない

用途

  • 管理画面やGmail

SSG

スクリーンショット 2021-08-29 12.15.14.png

概要

  • デプロイのタイミングなどで事前にHTMLを静的に作成
  • ブラウザがサイトにアクセスすると、プリレンダリングされたHTMLを表示(クリックイベントなどの振る舞いはない)
  • <script>要素からJSをロード
  • Reactでレンダリング

メリット

  • 初期表示のパフォーマンスが良い
  • JSが実行できないクライアントでも読める(OGP生成可能)
  • サーバ不要でS3や静的CDNを活用できる

デメリット

  • ビルドする対象が多い場合、ビルド時間が長い
  • コンテンツが追加されたり変更される度にビルドが必要になる
  • コンテキストによる内容の出しわけが困難
    • ビルドされる静的ファイルに情報を含めずにクライアントサイドで出し分けると、レイアウトシフトが発生してしまう

用途

  • コンテンツが頻繁に更新されないブログなどのメディア 

SSR

スクリーンショット 2021-08-29 12.16.00.png

概要

  • Railsと同じ
  • ブラウザがサイトにアクセスすると、サーバーが動的にHTMLを生成して返す
  • SSGと同じコンテンツ表示

メリット

  • CDNを使えばSSGと同様のパフォーマンスを得られる
  • コンテキストによってサーバーでの生成内容を変えれる

デメリット

  • 動的なサーバーを運用する必要がある
    • 実装が複雑になる
    • クライアントとサーバーで同じコードを用いるが、実行環境がクライアントはブラウザ、サーバーはNode.jsで異なる
    • Nextで複雑さが多少軽減される

用途

  • SSGでは難しい、更新頻度が高い大量のコンテンツを持つページ

CSR vs SSG vs SSR

  • まずは CSRかSSGのどちらかを検討

    • 静的にHTMLを生成するのが難しくない場合CSR
  • コンテンツ的に静的生成が難しくてOGPの対応や初期レンダリング速度に妥協できない場合SSR

  • サイト全てを統一する必要はない

    • レシピページはSSR、その他はCSR
    • ブログ記事はSSR、コメントはCSRとか
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?