業務でCSRアプリの開発に携わる機会があったので、これを機にSSRやSSGとの違い等について整理しておこうとおもいます。
CSR
概要
- client side rendering
- 名前の通り、クライアント側(ブラウザ)でレンダリングする
処理の流れ
- 初回アクセス時に、ほぼ空っぽのHTML, CSS, JavaScriptをレスポンスとして受け取る
- 受け取ったブラウザは、HTML, CSS, JavaScriptをもとにレンダリングする
メリット
- 静的ファイルを返せるホストサーバーであれば、(S3でも可)デプロイができる
- ページ遷移のたびに、サーバにリクエストする必要がない
- 処理がブラウザ内で完結するのでページ遷移が速い
- サーバーは初回リクエスト時にHTML, CSS, JavaScriptを返すだけなので、負荷が軽い
デメリット
- 初期ロードが重くなる
- 初期ロードのHTMLは空っぽなので、SEOに不利
SSR
概要
- server side rendering
- 名前の通り、サーバー側でレンダリングする
処理の流れ
- 初回アクセス時に、ほぼ空っぽのHTML, CSS, JavaScriptをレスポンスとして受け取る
- 受け取ったブラウザは、HTML, CSS, JavaScriptをもとにレンダリングする
メリデメは基本的にCSRの逆になる。
メリット
- 初期ロードが軽い
- SEOに有利
デメリット
- デプロイするのに、Node.jsを必要とする
- ページ遷移のたびに、サーバにリクエストする必要があるので、CSRより遅い
- リクエストのたびにサーバーでレンダリングするため、CSRより負荷が高い
SSG
概要
- static site generator
- 静的サイトジェネレーター
- CSRもSSRもリクエスト後にレンダリングするが、SSGはビルド時にプリレンダリングしておく点がCSR、SSRと異なる
処理の流れ
- アプリケーションのビルド時に、APIなどからデータを取得し、HTMLをプリレンダリングしておく
- サーバーにリクエストがきたら、このHTMLファイルを返す
メリット
- CSR同様、静的ファイルを返せるホストサーバーであれば、(S3でも可)デプロイができる
- プリレンダリングされたHTMLを返すだけなのでSSRより表示速度が早い
デメリット
- データ量が多いと、ビルドに時間がかかる
- コンテンツのリアルタイム性がない
メリデメまとめ
この観点でみると、SSG最強に見えますが、SSGの利用範囲は限定的ですし、用途に応じて適切に使い分けできるとよいですね!
CSR | SSR | SSG | |
---|---|---|---|
初期表示速度 | × | ○ | ◎ |
ページ遷移速度 | ○ | △ | ○ |
デプロイ | ○ | × | ○ |
SEO | × | ○ | ○ |
サーバー負荷 | ○ | × | ○ |
リアルタイム性 | ○ | ○ | × |