サーバーサイドレンダリングとサーバーコンポーネント
SSRと似た用語として、Reactには「サーバーコンポーネント」があります。SSRではWebページのHTML自体をサーバー側で生成しますが、サーバーコンポーネントではコンポーネント単位の仮想DOMまでをサーバー側で生成してクライアント側に送り、それを元にクライアント側で描画します。対して、クライアント側で仮想DOMの生成から描画までをすべて行う(今までの)コンポーネントは「クライアントコンポーネント」です。
つまり、コンポーネント単位でクライアントに送って描画する(仮想DOMを送る)のがServerコンポーネント
サーバーコンポーネントというのは、コンポーネント(部品)ごとに「見た目の設計図(仮想DOM)」をサーバー側で作って、その設計図をクライアント(ブラウザ)に送って、クライアント側で実際の画面(HTMLなど)を作る、という仕組みのことです。
具体的には…
-
SSR(サーバーサイドレンダリング)
サーバーがWebページ全体のHTMLを作って送ります。ブラウザはそれをそのまま表示するので、ページがすぐに見えるという特徴があります。 -
サーバーコンポーネント
こちらは、ページ全体ではなく、各コンポーネント単位で「仮想DOM」と呼ばれる、コンポーネントの構造や内容を表した設計図(JavaScriptのオブジェクト)をサーバー側で作ります。
その設計図は、実際のHTMLそのものではなく「どういう部品があって、どんな順番で並ぶか」を表したものです。
クライアント側では、その設計図を受け取ってから実際に画面を描く(HTMLに変換して表示する)ので、必要な情報だけを効率よく送ることができます。
子供向けの例え
例えば、LEGOブロックでお城を作るときのことを考えてみてね:
-
SSRの場合
サーバーが完成したお城そのものを作って、その写真をあなたに送るようなものです。あなたはその写真を見て、お城だとわかりますが、後から動かしたり変更したりはできません。 -
サーバーコンポーネントの場合
サーバーが「お城を作るためのレゴブロックの配置図」を作って、それをあなたに送ります。あなたはその配置図を見ながら、自分で実際にブロックを組み立ててお城を作るので、途中で部品を変えたり、動かしたりすることができるかもしれません。
このように、サーバーコンポーネントでは、サーバー側で各部品の「設計図」を作って送ることで、クライアント側で効率よく画面を作成できる仕組みになっている、ということです。