Slide 1

Slide 1 text

Web レンダリングの変化とどれ使うん @AkarengaLT by yuyays

Slide 2

Slide 2 text

今日話すこと • CSR, SSR, SSR with Suspense, Server Islands などの説明と図解 • それぞれの得意な点や苦手な点 • じゃあ実際に問題解決をしているの か

Slide 3

Slide 3 text

CSR(Client side rendering): クライエントサイドレンダリン グとは • 最小限の HTML とタグつきの JavaScript をクライアン トに送信 • ブラウザで JavaScript を実行してペ ー ジをレンダリ ング SSR(Serve side rendering): サ ー バ ー サイドレンダリングとは • サ ー バ ー 上でペ ー ジをレンダリング • HTML をクライアントに送信

Slide 4

Slide 4 text

• SSR モデルとたいだい同じであるが でかこ みコンポ ー ネント単位でサ ー バ ー よりストリ ー ミングで きる SSR with Suspense(IsomophicSSR Server Island ( サ ー バ ー アイランド ) • SSR モデルと似ているがサ ー バ ー より送られる静 的 HTML が最小のサイズの js バンドルをもってそ こからハイドレ ー ションしていく

Slide 5

Slide 5 text

図解にて解説します z csr, ssr, ssr with suspense, server island の順で

Slide 6

Slide 6 text

ブラウザ サ ー バ ー example.com リクエスト html をかえす ex. intex.html 1. すぐに静的 html をかえす 。 2. cache されているならそれを返す 。 html を読み込む JS バンドルを example.com/main.js をリクエス ト My Static Page

Hello World!

Javascript バンドルのファイルをかえす JS ファイルを読み込む デ ー タを API などを通じてリクエストする デ ー タベ ー ス デ ー タを返す (json 等) 読み込み ( レンダリン グ ) 完成したペ ー ジをようやく表示する .!!!! CSR モデル

Slide 7

Slide 7 text

良い点 • ブラウザの中でのインタラクションが早くでき ること 例 )SSR モデルでは js ファイルが読み 込むまではマウスクリックなどのイベントリス ナなどはできない • ペ ー ジ移動した際には新しいペ ー ジがすぐに表 示される 例 ) 全体のペ ー ジを移動するたびに ロ ー ドする必要がない

Slide 8

Slide 8 text

良くないかもしれない点 • Js バンドルのファイルが肥大であるなら 、 ペ ー ジをレンダリングするのに時間がかかる • パワ ー がない端末はクライエントで処理を行う ので時間がかかる • ネットワ ー クにもよる • API などのリクエスト往復は時間がかかる

Slide 9

Slide 9 text

ブラウザ サ ー バ ー example.com リクエスト html をかえす ex. intex.html html を読み込む JS バンドルを example.com/main.js をリクエス ト Javascript バンドルのファイルをかえす JS ファイルを読み込む デ ー タベ ー ス SSR モデル 完成したペ ー ジをようやく表示する .!!!!

Slide 10

Slide 10 text

良い点 • デ ー タが含んである html をクライエントにおく れる • SEO の向上: 検索エンジンはコンテンツが最初 の HTML で利用可能であるため簡単にクロ ー ル しインデックスすることが可能

Slide 11

Slide 11 text

良くない点 • hydration (ハイドレ ー ション)の問題点として Js ファイルがクライエント側でそれを実行して DOM にイベントハンドラ ー などのつけて html を インタラクティブにすること . しかし ,hydration を行うまではそれらの動作は できない .... • CDN に静的 html をおけないまたは vercel などに たよるしかない

Slide 12

Slide 12 text

SSR with Suspense(isomorphic SSR) • Suspense によりペ ー ジの各 々 こコンポ ー ネント をレンダリング可能にし , サ ー バ ー よりストリ ー ミングされる . • なのでペ ー ジを移動した際にはすぐにロ ー ドの スピ ー ナ ー などを表示できる

Slide 13

Slide 13 text

ブラウザ サ ー バ ー example.com リクエスト html をかえす ex. intex.html html を読み込む JS バンドルを example.com/main.js をリクエス ト Javascript バンドルのファイルをかえす JS ファイルを読み込む デ ー タベ ー ス Isomophic SSR モデル

Slide 14

Slide 14 text

サ ー バ ー example.com/engineercafe リクエスト json 等を送る ブラウザ React server runtime DB loading state 変化した部分の html を 送る 前の続き

Slide 15

Slide 15 text

• SSR モデルでは静的 html を CDN におけない CSR モデルでは CDN に置けていたがリクエ ストにすぐ答えらたが 良くないかもしれない点

Slide 16

Slide 16 text

ブラウザ サ ー バ ー example.com リクエスト html をかえす ex. intex.html json かえす html を読み込む JS バンドルを example.com/main.js をリクエスト ( ここがサ ー バ ー アイランドの部分) db 完成したペ ー ジを表示する .!!!! Server Island サ ー バ ー 静的 html を送り返す Astro server runtime server island の部分 の html とか えす

Slide 17

Slide 17 text

良い点 • 静的 html を cdn におけるので ssr モデルと比べる と設計が楽 • Javascript の量が少ないのでパフォ ー マンスも いい • React, Vue, Svelte など好きなフレ ー ムワ ー クを 使用可能

Slide 18

Slide 18 text

実際に問題解決してますか? • ただ単に複雑にエンジニアして , いらない問題をつくって 解いている? • Frontend framework なんでべつにフォ ー ムとレンダリ ングなんだからなんでそんな複雑なの? • 学習コスト ? 新しい人雇わないといけないの? • また 2,3 年で消えるんでしょとか .... • frontend は宗教戦争がありすぎる ... 状態ライブラリから フレ ー ムワ ー クなどまで

Slide 19

Slide 19 text

• CSR は非常にインタラクティブなシングルペ ー ジアプ リケ ー ションを作成するという問題を解決しました • SSR は CSR の SEO と初期ロ ー ド性能の問題に対処した • Isomorphic SSR は CSR と SSR の両方の利点を組み合わ せようとしています • Server Island は JS を最小化してパフォ ー マンスを最適 化しようとします 適したツ ー ルを使いましょう

Slide 20

Slide 20 text

• CSR : Gmail や Facebook のフロントエンドのような多くの SPA • SSR : E コマ ー スサイト 、 コンテンツの多いプラットフォ ー ム • Isomophic SSR : Next.js を使ったサイト( TikTok のウェ ブアプリなど) • Server Island model : コンテンツに特化したサイトやブロ グ 使用例

Slide 21

Slide 21 text

問題によって最適な道具を使いましょう

Slide 22

Slide 22 text

• https://www.youtube.com/watch?v=Cifkb-ZVps4 • https://dev.to/this-is-learning/javascript-frameworks-heading-into-2025-hkb • https://hartofthemidlands.co.uk/2019/07/the-right-tool/ • https://www.touken-world.jp/tips/43381/ 参照

Slide 23

Slide 23 text

• 現在ソフトウェアエンジニア (web アプリ開発 ) のお仕事 / 転職探している のでもしお仕事あるなら連絡ください! • [email protected] ありがとうございました