🎥
モダンフロントエンドデザインパターン 〜 優れた UX を実現するには 〜 | AWS Dev Day 2023 Tokyo
作成日: 2024-05-07T13:17:00.000Z
最終更新: 2024-08-07T13:15:00.000Z
動画見ながら要点だけメモっておくだけのもの
ユーザ体験の指標
-
Core Web Vitals
-
LCP
-
2.5秒以内にロードを目指すことが推奨されている
-
-
FCP
-
1.8秒以内のロードが推奨されている
-
-
FID
-
100ms以下を目指す
-
-
-
開発者体験の指標
-
ユーザー体験と開発者体験から見るフロントエンドのレンダリングパターン
レンダリングパターン
CSR(Client Side Rendering)
<div id=”root”></div>
のみのHTMLが最初にダウンロードされる- JSでページを構成する
- デメリット
- 最初にJSでページを構成するまで、ユーザに何もないページを提供することになる
- サーバーコスト:低
- クライアントコスト:高
- 最初にJSでページを構成するまで、ユーザに何もないページを提供することになる
- JSのサイズが多くなり、ユーザのデバイスが最新ではない傾向から、パフォーマンスの最適化が求められる
- Code SplittingやLazy Loadによるユーザ体験の向上
- 必要最低限のJSのみ最初に読み込んでおき、優先度の低いものは遅延読み込みをさせることで、ユーザに必要最低限の機能を最初に提供しておく
- 完成度(80%) → ユーザーが基本的に利用に支障がない → ユーザに使用してもらいつつ、裏で100%になるようにJSのDLをコントロールする
- 必要最低限のJSのみ最初に読み込んでおき、優先度の低いものは遅延読み込みをさせることで、ユーザに必要最低限の機能を最初に提供しておく
- Code SplittingやLazy Loadによるユーザ体験の向上
- AWSアーキテクチャの例
-
CloudFront + S3
-
キャッシュ
- ユーザのブラウザ = Private Cache
- CDN = Public Cache
- オリジンのキャッシュコントロールによってコントロールできる
- webpackにより、ハッシュ値を名前に設定することでキャッシュをクリアする方法が一般的
- 合わせてデプロイ際には、CDNのキャッシュもクリアする
-
Client Side Routingの制御
-
CloudFront Functionによる制御
- CloudFrontでは、2つのレイヤーが存在しており、よりユーザに近いEdge Locationで制御することが推奨される
-
SSR (Server Side Rendering)
-
Hydration
-
単なる文字列としてサーバー側から返却されるHTMLにイベントなどをアタッチし、HTMLを完成させる
-
-
AWS アーキテクチャ
- SSRするサーバーとデータソース
- サーバー側でHTMLを構築する際にAPIを介したり、直接DBにリクエストする
- Lambda Edgeを利用するパターン
- SSRするサーバーとデータソース
-
SSRのレンダリングプロセス
- FCPは短縮できる(画面の最初の描画は早い)
- TTIは、CSRとほぼ変わらない(ユーザが利用できるようになるまでの時間は変わらない)
- 画面は表示されているのに、ユーザが操作できないといった体験が生まれる可能性があることに注意
-
SSRの課題
-
これらを解決するStreaming HTMLやSelective Hydration
-
Streaming HTML
- データフェッチが終わったところから、HTMLを部分的に返却していく
- FCPやTTIを早めることができる
- データフェッチが終わったところから、HTMLを部分的に返却していく
-
Selective Hydration
- ReactのSuspenseなど
-
SSG(Static Site Genetation)
-
prerenderring
-
SSRは、ユーザからのリクエストに応じてHTMLを生成する
-
SSGは、事前にすべてのページを生成する
- サーバーサイドでのレンダリングやフェッチが不要になり、ユーザに早く届けることができる
-
AWS アーキテクチャ
-
ビルドしたHTMLをS3へ配置
-
-
SSGの得意領域
- 表示速度に特化
- 注意点
ISR(Incremental Static Regeneration)
-
ページに優先度をつけて、必要な分だけ生成することでSSGのビルドにかかる時間という課題を解決する
-
Cache
- 60秒ごとのrevalidate
- オンデマンド revaidationも選択肢にある
Next.jsのホスティングパターン
-
Serverless
- Next12までの一部の機能をサポートしていることやLambda@Edgeを利用している点への注意
- Serverless Next.jsの開発は停止している
-
Open Nextという方法
-
Lambda アダプター
-
Amplify Hosting
- シンプルに利用できるが、すべての機能をサポートしていない
-
Computing
- 開発コストは上がるが、すべての機能を利用できる
まとめ
おまけ
メモ
- SSR
- SSRはお客様でトラブルが発生した際に問題の切り分けがしやすい
- CSRはお客様の環境でwebページを構築してしまうので、お客様環境固有の問題なのか、サービス側が送信したものに不具合があったか分かりにくい
- SSRの場合は、提供しているものをサーバー側で作っているのでバックアップをとって実際にお客様に渡しているものを把握できる
- JSが動かない環境でも目的を果たせる(かもしれない)
- CSRはJSが動かないとほとんど何もできない
- SSRはサーバー側でHTMLを構築するのでJSが機能しないお客様のフォローもできる
- SSRはお客様でトラブルが発生した際に問題の切り分けがしやすい