Open6

SPA, CSR, SSR, SSGを理解する

arabyaraby

SPA

Single Page Application

SPAの開発にReactが使用される。

返却されるHTMLファイルが一つなので、そう呼ばれる。
SPAは毎回HTMLを返すのではなく、差分を更新していく

①WebサーバーにHTTPリクエストを送信
②HTML/CSS/JSを返す
③2回目以降のリクエストでは、Ajaxで差分情報のリクエストをサーバーに送る
 ※Ajax = Asynchronous JavaScript + XML
④サーバーからのレスポンスは JSON 形式のデータがレスポンスされる
⑤ブラウザは返ってきた差分箇所のJSONデータを、JavaScriptでHTMLに追加して表示する

APIとAjaxの関係性

API は 厳密には Ajax でのリクエストに JSON データをレスポンスするためのサーバーサイドのプログラムです。

https://www.azusuki.com/spa-mpa/
https://iwasawa-officialweb.com/2019/04/20/これからの-webアプリプログラムの基礎【spa-ajax-api】/
https://qiita.com/manabito76/items/fe91eefe11a74dcf5126#spasingle-page-application

arabyaraby

CSR

SPAとほぼ同義。

最初のビルドで、最小限の空のHTML、CSS、JavaScriptファイルを生成する。

ここからSPAの流れと一緒で、
ブラウザはWebサーバーにHTTPリクエストを行い、上記のHTML・CSS・JSファイルを返される。

ページがブラウザによってロードされると、
そのJavaScriptコードが実行され、ページを完全にインタラクティブにする。
(このプロセスをhydrationという)

クライアント(ブラウザ)によって、JSで描画を行うことから、
クライアントサイドレンダリングと呼ばれる。

一番最初はクライアント側で描画を行うので、ロードに時間がかかる。

クライアント側でレンダリングされる=クローラーからは何も見えないので、SEOに不利と言われる。

https://zenn.dev/takuyakikuchi/articles/2f7e54bdafce52#csr
https://serip39.hatenablog.com/entry/2020/08/23/225000
https://nextjs.org/learn-pages-router/basics/data-fetching/pre-rendering
https://www.planet-meron.com/articles/2023/1/0124_csr_ssg_ssr/

arabyaraby

SSR

Server Side Rendering

Next.jsで使える。

SPAとMPAの間みたいな感じ。

サーバー側でプリレンダリングを行い、HTML ・CSS・JS を返す。
クライアント側でJavaScript が実行されてレンダリングされサイトがインタラクティブになる。(Hydration)

サーバー側でプリレンダリングされる分、初期描画速度が速い。

SSGと違い、リクエスト時にサーバー側でレンダリングする。

リクエストごとにページを生成する。そのため、サーバーに負荷がかかる。
大量のアクセスが来た場合などに、サーバー側の負荷が高くなってしまう。

https://zenn.dev/bitarts/articles/37260ddb28ae5d
https://serip39.hatenablog.com/entry/2020/08/23/225000
https://qiita.com/ShoWaka/items/4f85cd6a3496bbb0c25b
https://zenn.dev/rh820/articles/6234843d726ed3
https://tech.iimon.co.jp/entry/2023/08/28/000000