Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
サイボウズフロントエンドマンスリー#26_エイチーム
Search
AijiUejima
August 30, 2022
Technology
480
0
Share
サイボウズフロントエンドマンスリー#26_エイチーム
AijiUejima
August 30, 2022
More Decks by AijiUejima
See All by AijiUejima
エッジはフロントエンドなのか? バックエンドなのか? について考えてみる
aiji42
7
6.1k
Cloudflare Workersで構築する非同期ジョブシステム
aiji42
7
3k
VRTツールのダークホース Lost Pixelを紹介したい
aiji42
5
3.3k
オリジンサーバに手を付けないパーフォマンス改善
aiji42
5
1.8k
Cloudflare Fonts試してみた🔤
aiji42
2
880
Hyperdrive試してみた🛸
aiji42
3
1.6k
Workers Browser Rendering API について
aiji42
0
660
VercelとNext.jsの機能を最大限に活用したA/Bテスト手法
aiji42
6
1.8k
Cloudflare WorkersとKVで キャッシュを非同期に更新する | Cloudflare Meetup Nagoya
aiji42
1
1.1k
Other Decks in Technology
See All in Technology
EBS暗号化に失敗してEC2が動かなくなった話
hamaguchimmm
2
200
Good Enough Types: Heuristic Type Inference for Ruby
riseshia
0
150
20260423_執筆の工夫と裏側 技術書の企画から刊行まで / From the planning to the publication of technical book
nash_efp
3
380
弁護士ドットコム株式会社 エンジニア職向け 会社紹介資料
bengo4com
1
140
基盤を育てる 外部SaaS連携の運用
gamonges_dresscode
1
110
コードや知識を組み込む / Incorporate Code and Knowledge
ks91
PRO
0
130
目的ファーストのハーネス設計 ~ハーネスの変更容易性を高めるための優先順位~
gotalab555
8
2.1k
明日からドヤれる!超マニアックなAWSセキュリティTips10連発 / 10 Ultra-Niche AWS Security Tips
yuj1osm
0
570
え!?初参加で 300冊以上 も頒布!? これは大成功!そのはずなのに わいの財布は 赤字 の件
hellohazime
0
160
LLM時代の検索アーキテクチャと技術的意思決定
shibuiwilliam
3
1.1k
みんなの「データ活用」を支えるストレージ担当から持ち込むAWS活用/コミュニティー設計TIPS 10選~「作れる」より、「続けられる」設計へ~
yoshiki0705
0
240
扱える不確実性を増やしていく - スタートアップEMが考える「任せ方」
kadoppe
0
290
Featured
See All Featured
Balancing Empowerment & Direction
lara
6
1.1k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
69
39k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.5k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
What's in a price? How to price your products and services
michaelherold
247
13k
AI: The stuff that nobody shows you
jnunemaker
PRO
6
570
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
94
The SEO identity crisis: Don't let AI make you average
varn
0
440
Odyssey Design
rkendrick25
PRO
2
570
Transcript
© 2022 Ateam Inc. Cybozu Frontend Monthly #26
名前: aiji 職業: Webエンジニア (アプリケーションエンジニア) 分野: Cloudflare, Nodejs, TypeScript React,
Next.js, Remix, AWS, GCP 所属: Ateam Lifedesign Inc. twitter: @aiji42_dev GitHub: aiji42 Who am I ?
Who am I ? 名前: rito / chimame 職業: Webエンジニア
(アプリケーションエンジニア) 分野: Cloudflare, Ruby, Nodejs, TypeScript React, Docker, AWS, GCP 所属: Ateam Lifedesign Inc. twitter: @chimame_rt GitHub: chimame
© 2022 Ateam Inc. 4 エイチーム事業内容
© 2022 Ateam Inc. 5 エイチーム 主なサービス内容
© 2022 Ateam Inc. 今日 発表テーマ 6月頃、Zennに連投した記事 詳細
© 2022 Ateam Inc. CSRなサイトを (疑似的な)ISRに変更した話 7
© 2022 Ateam Inc. 題材となったサービス エイチームライフデザインが運営して いる総合情報サイト - カードローン -
クレジットカード - 転職 - 引越し - etc… SEOを重視したWebメディア
© 2022 Ateam Inc. 今日 話 赤枠で囲ったところ
© 2022 Ateam Inc. 今日 話 赤枠で囲ったところ
© 2022 Ateam Inc. Client Server Storage Database Api server
ナビナビ レンダリングに CSRが採用されている
© 2022 Ateam Inc. ナビナビ レンダリングに CSRが採用されている CSR 特徴 -
コンテンツ レンダリングをブラウザで行う - パフォーマンス ユーザ 環境に依存する - TTFB 早いがLCP・TTIまで 時間が長くなる傾向にある - クローラー インデックスが遅い - ナビナビ SEOを重視したメディアな で対策が必要
© 2022 Ateam Inc. Dynamic Rendering クローラーがJSを実行・解釈できなかった頃に提唱された対策 https://developers.google.com/search/docs/advanced/javascript/dynamic-rendering?hl=ja
© 2022 Ateam Inc. https://developers.google.com/search/docs/advanced/javascript/dynamic-rendering?hl=ja Dynamic Rendering レンダラに Rendertron(仮想ブラウザ)が採用されることが多い Rendertron
© 2022 Ateam Inc. ナビナビで実際に行われていたクローラー対策 ユーザに CSR用 スクリプトを返却 ボットに 静的なHTMLを返却
定期タスクで レンダリングしたデータを ストレージに保存 Origin Strage
© 2022 Ateam Inc. CWV対策 できていなかった(Chrome UX report)
© 2022 Ateam Inc. 現状 コードに大きな変更を加えずに CWVを改善する方法を模索 17
© 2022 Ateam Inc. ダイナミックレンダリングをベースにした改善を計画 ダイナミックレンダリングによる静的 HTMLをCDNでキャッシュし、 ボットだけでなくユーザにもそれを返却することで CWVを改善する。 さらにCloudflareWorkersでキャッシュコントロールすることで
ISRを実現する。
© 2022 Ateam Inc. 初回アクセス(キャッシュなし) オリジンからCSRスクリプトを返却 Client Origin Database Api
server Rendertron Cloudflare Workers
© 2022 Ateam Inc. レスポンス後に非同期でダイナミックレンダリング +キャッシュ保存を行う Client Origin Database Api
server Rendertron Cloudflare Workers KV
© 2022 Ateam Inc. 以降 リクエスト キャシュにより、ダイナミックレンダリング済み コンテンツが返却される restore cache
Client Origin Database Api server Rendertron Cloudflare Workers KV
© 2022 Ateam Inc. KV(キャッシュ)にExpire情報をもたせることで擬似的なISRを実現することも可能に if steal… regenerate Client Origin
Database Api server Rendertron Cloudflare Workers KV KV KV
© 2022 Ateam Inc. 導入結果 23
© 2022 Ateam Inc. 大幅に改善 (Chrome UX report)
© 2022 Ateam Inc. 大幅に改善 (Lighthouse) Before After
© 2022 Ateam Inc. アピールポイント 26
© 2022 Ateam Inc. ①Rendertron 魔改 そ ままで 組み込めない で、リポジトリクローンして地道に書き換え
- scriptタグを消す仕様を無効化 - Bot JSが必要ない でデフォルトで scriptタグが消える - ユーザがインタラクティブに操作するためJS 必要 - ApolloClient キャッシュをDOMに吐き出すようにする(後述) - Rendertronを通過したことを示すタグを挿入 - クライアント側 処理に使用
© 2022 Ateam Inc. ②データ再フェッチ 抑制 クライアントで再フェッチが発生しそ ままで LCPが改善しない SSR/SSGで取られる手法をRendertronに組込んで解決する
Rendertron pre-render & expose cache ApolloClient キャッシュを シリアライズしDOMに書き込む DOM上 キャッシュからリストアし データフェッチを省略 ❌ Origin Client
© 2022 Ateam Inc. ③キャッシュとリアルタイム 共存 社内アクセス 社外アクセス Cloudflare KV
HTML + cache expire 2つが保存されている response HTML(SSR) response HTML(CSR) Rendertron response HTML(CSR) save HTML generate HTML (if cache expire) generate HTML(all access) アクセス 社内、社外で ルートと異なる CSRを実行して レンダリングした HTMLを生成する 記事を編集した結果をリアルタイムで表示する KV
© 2022 Ateam Inc. 今後 展望 30
© 2022 Ateam Inc. 今後 展望 改善 したが、まだ完璧で ない 【残課題】
LCPおよびSI 改善したが、FCPおよびTTIが改善していない 【理由】 今回 対策で アプリケーション ほぼ手を入れていない で不要なJS ロードなども原因 1つだが、それと 別にRendertron HTMLレンダリングと Next.jsによるCSRが2回実行されることも原因 1つ。
© 2022 Ateam Inc. 今後 展望 対策案① GraphQL キャッシュをDOMに保持する で
なくGraphQLリクエスト自体 をキャッシュする 【説明】 少し難しい話になるが、GraphQL キャッシュリストを行うとReact Hydrateエ ラーを回避するためにNext.jsで CSRも再度実行するということを行ってい る。通常 GraphQLリクエスト 場合 それが起きない。
© 2022 Ateam Inc. 今後 展望 対策案② 擬似的なISRをやめ、SSR+キャッシュに寄せる 【説明】 そもそもCSRでWebメディアを運用する
に苦しい局面がある。インタラクティ ブに動作する画面でなけれ SSRに寄せる。リクエスト 都度SSRする 非 常にもったいない で、SSRした結果をどこかにキャッシュして配信する が一 番効率的。(ただし、改修コスト …)
© 2022 Ateam Inc. PR - 新卒向け - 9/8、9/27: オンライン会社説明会
(詳しく 採用ページへ) - 短期インターン(1week)と長期インターン(2months~)やってます - 中途向け - 直近 イベント等 ありませんが、常時採用してます! - 詳しく聞きたい、カジュアルに話してみたいという方 、 ぜひDMをお願いします 採用に限らず様々な技術発信をしてます で、ぜひフォローをお願いします
None