rights reserved. Google の検索エンジンのアルゴリズムを最適化するための指標 Google Page Experience Signal Loading Largest Contentful Paint (LCP) Interactivity First Input Delay (FID) Visual Stability Cumulative Layout Shift (CLS) Mobile Friendly HTTPS No Intrusive Intersitials https://developers.google.com/search/blog/2021/08/simplifying-the-page-experience-report?hl=ja
rights reserved. Google の検索エンジンのアルゴリズムを最適化するための指標 Google Page Experience Signal Loading Largest Contentful Paint (LCP) Interactivity First Input Delay (FID) Visual Stability Cumulative Layout Shift (CLS) Mobile Friendly HTTPS No Intrusive Intersitials Core Web Vitals https://developers.google.com/search/blog/2021/08/simplifying-the-page-experience-report?hl=ja
rights reserved. ページ内で⼀番⼤きなコンテンツが表⽰されるまでの時間 Largest Contentful Paint (LCP) Largest Content geeawa.io/blog/abc 最も⼤きなコンテンツ Images Image tags Video thumbnails Background image with CSS Text elements, headings etc.. https://web.dev/lcp/
rights reserved. ページ内のいずれかの部分が画⾯上にレンダリングされるまでの時間 First Contentful Paint (FCP) https://web.dev/fcp/ geeawa.io/blog/abc geeawa.io/blog/abc Largest Content geeawa.io/blog/abc geeawa.io/blog/abc FCP LCP First Contentful Paint Largest Contentful Paint
rights reserved. ユーザが最初にページを操作してから、ブラウザが応答するまでの時間 First Input Delay (FID) html css js js image, etc… Network request Main thread task Navigation Start Styles are loaded and Browser can paint content Main thread is idle FCP TTI (Time to Interactive) Network Requests Main Thread Interactive !! FID Browser can respond to first user input Browser receieves first user input
rights reserved. 良好なユーザ体験を提供するために、100 ms 以下を⽬指す First Input Delay (FID) https://web.dev/fid/ GOOD NEEDS IMPROVEMENT POOR FID First Input Delay 100 ms 300 ms
rights reserved. Core Web Vitals ウェブサイトにおけるユーザ体験の指標 TTFB Time To First Byte ブラウザが最初のバイトを 受信するまでの時間 FCP First Contentful Paint ブラウザが最初の要素を 表⽰するまでの時間 LCP Largest Contentful Paint ブラウザが最も⼤きい要素を 表⽰するまでの時間 TTI Time To Interactive ユーザの⼊⼒を即座に応答できる ようになるまでの時間 CLS Cumulative Layout Shift ページレイアウトのズレを 定量的に数値化 FID First Input Delay ユーザが⼊⼒をしてから ブラウザが応答するまでの時間 ※ 2024年に FID ではなく、INP (Interaction to Next Paint) を Core web vitals の metric にしようとする動きもあります。
rights reserved. アプリケーションシェルとなる HTML を取得 Client-side Rendering (CSR) - Process GET / GET /bundle.js render (app) Network Requests Main Thread First Paint (FP) 背景⾊やヘッダーなど視覚的に何かが表⽰されたタイミング First Contentful Paint (FCP) 何らかユーザにとって意味のある DOM 要素が表⽰されたタイミング Time to Interactive (TTI) ユーザの操作をインタラクティブに受け付けることができるタイミング
rights reserved. 部分的なコンテンツのみを表⽰(空⽩ページ or Loading Indicator) Client-side Rendering (CSR) - Process GET / GET /bundle.js render (app) Network Requests Main Thread FP First Paint (FP) 背景⾊やヘッダーなど視覚的に何かが表⽰されたタイミング First Contentful Paint (FCP) 何らかユーザにとって意味のある DOM 要素が表⽰されたタイミング Time to Interactive (TTI) ユーザの操作をインタラクティブに受け付けることができるタイミング
rights reserved. 意味のあるコンテンツがレンダリングされる Client-side Rendering (CSR) - Process GET / GET /bundle.js render (app) Network Requests Main Thread FCP FP First Paint (FP) 背景⾊やヘッダーなど視覚的に何かが表⽰されたタイミング First Contentful Paint (FCP) 何らかユーザにとって意味のある DOM 要素が表⽰されたタイミング Time to Interactive (TTI) ユーザの操作をインタラクティブに受け付けることができるタイミング
rights reserved. ユーザのインタラクティブな操作に応答できる Client-side Rendering (CSR) - Process GET / GET /bundle.js render (app) Network Requests Main Thread FCP TTI FP First Paint (FP) 背景⾊やヘッダーなど視覚的に何かが表⽰されたタイミング First Contentful Paint (FCP) 何らかユーザにとって意味のある DOM 要素が表⽰されたタイミング Time to Interactive (TTI) ユーザの操作をインタラクティブに受け付けることができるタイミング
rights reserved. ページの表⽰までの時間は JavaScript のバンドルサイズに依存 Client-side Rendering (CSR) - Process GET / GET /bundle.js render (app) Network Requests Main Thread FCP TTI FP First Paint (FP) 背景⾊やヘッダーなど視覚的に何かが表⽰されたタイミング First Contentful Paint (FCP) 何らかユーザにとって意味のある DOM 要素が表⽰されたタイミング Time to Interactive (TTI) ユーザの操作をインタラクティブに受け付けることができるタイミング
rights reserved. ページの表⽰までの時間は JavaScript のバンドルサイズに依存 Code Splitting, Lazy Loading GET / GET /bundle.js render (app) Network Requests Main Thread FCP TTI FP First Paint (FP) 背景⾊やヘッダーなど視覚的に何かが表⽰されたタイミング First Contentful Paint (FCP) 何らかユーザにとって意味のある DOM 要素が表⽰されたタイミング Time to Interactive (TTI) ユーザの操作をインタラクティブに受け付けることができるタイミング
rights reserved. Webpack, Rollup などのバンドラーを使って、ビルド時にコードを分割 ページ表⽰に必要なコードだけを遅延読み込みさせる Code Splitting, Lazy Loading GET / render (app) Network Requests Main Thread FCP TTI FP GET /bundle1.js GET /bundle2.js GET /bundle3.js Lazy Loading First Paint (FP) 背景⾊やヘッダーなど視覚的に何かが表⽰されたタイミング First Contentful Paint (FCP) 何らかユーザにとって意味のある DOM 要素が表⽰されたタイミング Time to Interactive (TTI) ユーザの操作をインタラクティブに受け付けることができるタイミング
rights reserved. What is the Hydration? hydrate(HTML) SSR された⽂字列 HTML をクライアントで イベントを受け取れるよう⽣きた仮想DOMとして再開させること HTML (String) イベントハンドラーの 「⽔」 で 「乾いた」 HTML に⽔を注ぐ renderToString(<App/>)
rights reserved. FCPは短縮できるが、TTI は何も変わらない むしろ、First Input Delay (FID) を誘発しやすくなることも SSR with Hydration - Process Network Requests Main Thread FID TTI GET /bundle.js Hydration GET / FCP サーバでのデータフェッチ レンダリング First Contentful Paint (FCP) 何らかユーザにとって意味のある DOM 要素が表⽰されたタイミング Time to Interactive (TTI) ユーザの操作をインタラクティブに受け付けることができるタイミング Fist Input Delay (FID) ユーザの操作に対して応答されるまでの時間
rights reserved. SSR with Hydration – まとめ TTFB Time To First Byte ブラウザが最初のバイトを 受信するまでの時間 FCP First Contentful Paint ブラウザが最初の要素を 表⽰するまでの時間 LCP Largest Contentful Paint ブラウザが最も⼤きい要素 表⽰するまでの時間 TTI Time To Interactive ユーザの⼊⼒を応答できる ようになるまでの時間 CLS Cumulative Layout Shift ページレイアウトのズレを 定量的に数値化 FID First Input Delay ユーザが⼊⼒をしてから ブラウザが応答するまで
rights reserved. SSR + Hydration では CSR と⽐べて TTI に変わりがなかった問題を克服 Streaming HTML - Process GET / GET /bundle.js Network Requests Main Thread FCP TTI First Contentful Paint (FCP) 何らかユーザにとって意味のある DOM 要素が表⽰されたタイミング Time to Interactive (TTI) ユーザの操作をインタラクティブに受け付けることができるタイミング
rights reserved. SSR + Hydration では CSR と⽐べて TTI に変わりがなかった問題を克服 Streaming HTML - Process GET / GET /bundle.js Network Requests Main Thread FCP TTI 必要に応じて Stream 読み込み First Contentful Paint (FCP) 何らかユーザにとって意味のある DOM 要素が表⽰されたタイミング Time to Interactive (TTI) ユーザの操作をインタラクティブに受け付けることができるタイミング
rights reserved. Static Site Generation (SSG) Server-side Rendering (SSR) Static site Generation (SSG) or pre-rendering Rendering… Pre-renderd index.html about.html article.html
rights reserved. Server-side Rendering (SSR) と⽐べて、FCP と TTI の両者を短縮する Static Site Generation - Process GET / Network Requests Main Thread FCP TTI SSR の場合 First Contentful Paint (FCP) 何らかユーザにとって意味のある DOM 要素が表⽰されたタイミング Time to Interactive (TTI) ユーザの操作をインタラクティブに受け付けることができるタイミング
rights reserved. Server-side Rendering (SSR) と⽐べて、FCP と TTI の両者を短縮する Static Site Generation - Process GET / Network Requests Main Thread FCP TTI サーバでのデータフェッチや レンダリング処理時間も改善 SSG の場合 First Contentful Paint (FCP) 何らかユーザにとって意味のある DOM 要素が表⽰されたタイミング Time to Interactive (TTI) ユーザの操作をインタラクティブに受け付けることができるタイミング