Web全般
2021.7.5
Next.jsの記事でReactはSPAとして単一のJavaScriptを生成する、という話をしました。
今回は改めてSPAとSSR、SSGのしくみや違いについてまとめてみようと思います。
ブラウザレンダリングのしくみの記事で簡単にまとめていますが、まずレンダリングのおさらいをしてみます。
レンダリングとは、サーバーから受け取ったHTML,CSS,JavaScriptをブラウザに表示させる一連の流れのことをいいます。
簡単にまとめると、
1.HTML、CSS、JavaScriptの順にParsing(ブラウザが理解できる形式に変換)
2.レンダーツリー(HTMLのDOM、CSSのCSSOM)と呼ばれるツリーオブジェクトを生成
3.画面にレイアウト
4.描画
の流れです。
SPAとは、名前のとおりページ遷移を行わず、1つのページでコンテンツを切り替えるアプリケーションのことをいいます。
それに対して、各ページごとにHTMLファイルが存在する従来のしくみをMPA(Multiple Page Application)といいます。
MPAでは、クライアント側からのリクエストごとにサーバーがHTMLファイルを返し、描画(レンダリング)します。
SPAでは、クライアント側からの初回リクエストのみ、サーバーがほぼ空のHTMLファイルとすべてのファイルを返し、クライアント側で描画します。
具体的な流れは下記のとおりです。
クライアントでレンダリングを行うため、SPAのしくみは、CSR(Client Side Rendering)ともいいます。
SSRとは、サーバーでレンダリングを行ってHTMLを生成し、クライアント側では描写(Painting)のみを行う技術です。
SPAのデメリットであった初期表示の遅さやSEO問題を解消することができます。
SSRでは、クライアント側からの初回リクエスト時にサーバーでHTMLを生成してクライアントに返し、クライアントは返されたHTMLを表示させます。
具体的な流れは下記のとおりです。
訳すと静的サイト生成とあるように、SSGはアプリのビルド時にAPIからデータを取得し、静的なHTMLファイルを生成するしくみです。
SSGでは、ビルド時にHTMLファイルを生成し、クライアントからリクエストがあったら、サーバーは生成済みのファイルを返します。
具体的には
SSGはリクエストより前にレンダリングを行って静的ファイルを生成しておくので、プリレンダリングともいいます。
開発するアプリケーションによってSPA、SSR、SSGのどれを選択するべきか、最適な選択ができるようになりたいですね。
Megumi Tanimoto
Editor
フロントエンドエンジニア1年目。
エンジニアライフ、技術的なアウトプットを中心に発信します。