Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SSRとCSRの狭間で〜ハイパフォーマンスWebサービスを夢見るフロントエンドエンジニアの闘い〜

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 SSRとCSRの狭間で〜ハイパフォーマンスWebサービスを夢見るフロントエンドエンジニアの闘い〜

BigLT Aizu 2019

Avatar for Hiroaki KARASAWA

Hiroaki KARASAWA

June 29, 2019
Tweet

More Decks by Hiroaki KARASAWA

Other Decks in Technology

Transcript

  1. 1 Confidential - Do Not Share SSR と CSR の狭間で

    〜ハイパフォーマンス Web サービスを夢見るフロントエンドエンジニアの闘い〜 bigLT 2019 aizu / June 29, 2019. @karszawa
  2. 2 Confidential - Do Not Share Web Front-end Engineer Joined

    Mercari as newgrads in April 2019. Twitter @karszawa React / TypeScript / vscode / Chrome Hiroaki KARASAWA
  3. 4 Confidential - Do Not Share 今日話すこと But about Architecture

    Not about Libraries SSR, CSR, or others React, Vue, Angular...
  4. 5 Confidential - Do Not Share 今日話すこと 1. Web技術の変化とパフォーマンス改善の歴史 2.

    CSR / SSR ↔ Client / Server Side Rendering 3. 今年、一押しの技術 4. まとめ
  5. 7 Confidential - Do Not Share Web Front-end の歴史は巨大化と抑制の繰り返し 2006

    2010 2015 2019 jQuery Backbone.js, AngularJS React, Redux TypeScript, TDD 動的なサイトが 簡単に作れる! 「現在の状態」が 管理できる! 状態の「更新」がき れいに書ける! 巨大なコードベー スでも見通しが良く なる!
  6. 10 Confidential - Do Not Share Client / Server Side

    Rendering Keywords: Front-end libraries, Performance issues, HTTP Archive
  7. 11 Confidential - Do Not Share CSR: Client Side Rendering

    • 2014 年ぐらいからのトレンド 「今年、一押しの技術」まであと 5年…! • 問題① React ライブラリが通信容量を圧迫する • 問題② React の実行はパフォーマンスの問題を起こす React などの vDOM ライブラリで HTML をクライアントで動的に生成
  8. 12 Confidential - Do Not Share SSR: Server Side Rendering

    サーバーで動かせば良いよね → SSR: Server Side Rendering • サーバーのリソースはお金や工夫で解決できる • HTML だけ送信すればリソース送信量も減少する(こともある) 「SSR と CSR の中間的な方策はたくさんある」 今日は3つの既存手法と今年イチオシの手法を紹介する React のレンダリングはサーバーサイドでもできる
  9. 13 Confidential - Do Not Share ブラウザでのパフォーマンスを測るメトリクスについて TTFB (Time to

    First Byte) → 最初のリクエストを帰ってくるまで FP (First Paint) → 最初の描画が発生するまで FCP (First Contentful Paint) → メインコンテンツが描画されるまで TTI (Time to Interactive) → ユーザー操作を受け付けるまで ページが表示される段階ごとにいろいろな指標(メトリクス)がある
  10. 14 Confidential - Do Not Share Static SSR • サーバーの責務は

    静的ファイルの送信 だけ • サーバーは置いてあるコードを返すだけなので FCP は最速 • JS がないので当然 TTI は最速 • すべてのページをデプロイのたびに作り直さないといけないので コンテンツが限定的でないと使えない デプロイ時に HTML/CSS をビルドしてリソースを静的配信する
  11. 15 Confidential - Do Not Share CSR with Pre-rendering •

    サーバーの責務は 静的ファイル の送信だけ • 速い FP • 遅い FCP & TTI App Shell だけをプリレンダリングして、ユーザー固有部分は CSR
  12. 16 Confidential - Do Not Share SSR with Hydration •

    サーバーでは HTML 作成のため • クライアントではイベントハンドラの登録のため Pros/Cons • 速い FCP • 遅い TTI → 見えてるのに反応しない → 不気味の谷 サーバーとクライアントで2度レンダリングを行う
  13. 18 Confidential - Do Not Share Streaming SSR • 最速の

    FP 速い FCP • 不気味の谷はバレにくくなったがデータ転送量はむしろ増加 HTML をチャンクに分割して送信し徐々にレンダリングする
  14. 19 Confidential - Do Not Share Progressive Hydration • ビューポートに入った要素だけ処理をダウンロードして実行する

    ◦ 現在は IntersectionObserver と dynamic import を用いて Hacky な実装ができる ◦ 今年中には React が標準対応しそう • TTI の減少 • データ送信量の絶対量が減少 見えてる要素だけ Hydration (イベントハンドラの登録)を行う
  15. 22 Confidential - Do Not Share 画像をはめた説明のときに使用してください。 ここにタイトルをいれる Rendering on

    the Web | Web | Google Developers https://developers.google.com/web/updates/2019/02/rendering-on-the-web
  16. 23 Confidential - Do Not Share Thank you! About Mercari

    About me 新卒採用中! 通年インターン募集中! @karszawa