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
NuxtJS + SSRで作ったGREE Tech Conference 2020
Search
gree_tech
PRO
September 18, 2020
Technology
0
300
NuxtJS + SSRで作ったGREE Tech Conference 2020
GREE Tech Conference 2020 で発表された資料です。
https://techcon.gree.jp/2020/session/ShortSession-2
gree_tech
PRO
September 18, 2020
Tweet
Share
More Decks by gree_tech
See All by gree_tech
REALITY株式会社における開発生産性向上の取り組み: 失敗と成功から学んだこと
gree_tech
PRO
2
130
『ヘブンバーンズレッド』におけるフィールドギミックの裏側
gree_tech
PRO
2
90
セキュリティインシデント対応の体制・運用の試行錯誤 / greetechcon2024-session-a1
gree_tech
PRO
1
96
『アナザーエデン 時空を超える猫』国内海外同時運営実現への道のり ~別々で開発されたアプリを安定して同時リリースするまでの取り組み~
gree_tech
PRO
1
78
『アサルトリリィ Last Bullet』におけるクラウドストリーミング技術を用いたブラウザゲーム化の紹介
gree_tech
PRO
1
89
UnityによるPCアプリの新しい選択肢。「PC版 Google Play Games」への対応について
gree_tech
PRO
1
110
実機ビルドのエラーによる検証ブロッカーを0に!『ヘブンバーンズレッド』のスモークテスト自動化の取り組み
gree_tech
PRO
1
110
"ゲームQA業界の技術向上を目指す! 会社を超えた研究会の取り組み"
gree_tech
PRO
1
140
Jamstack でリニューアルするグリーグループのメディア
gree_tech
PRO
2
300
Other Decks in Technology
See All in Technology
Platform Engineering for Software Developers and Architects
syntasso
1
510
Why App Signing Matters for Your Android Apps - Android Bangkok Conference 2024
akexorcist
0
120
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
220
ドメイン名の終活について - JPAAWG 7th -
mikit
33
20k
元旅行会社の情シス部員が教えるおすすめなre:Inventへの行き方 / What is the most efficient way to re:Invent
naospon
2
330
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.8k
Amazon Personalizeのレコメンドシステム構築、実際何するの?〜大体10分で具体的なイメージをつかむ〜
kniino
1
100
安心してください、日本語使えますよ―Ubuntu日本語Remix提供休止に寄せて― 2024-11-17
nobutomurata
1
990
社内で最大の技術的負債のリファクタリングに取り組んだお話し
kidooonn
1
550
なぜ今 AI Agent なのか _近藤憲児
kenjikondobai
4
1.3k
テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた話
ysknsid25
7
2.6k
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
870
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
410
Embracing the Ebb and Flow
colly
84
4.5k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Rails Girls Zürich Keynote
gr2m
94
13k
We Have a Design System, Now What?
morganepeng
50
7.2k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
Six Lessons from altMBA
skipperchong
27
3.5k
Thoughts on Productivity
jonyablonski
67
4.3k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Done Done
chrislema
181
16k
Transcript
NuxtJS + SSRで作った GREE Tech Conference 2020 グリー株式会社 フロントエンドエンジニア 大野 佳
大野 佳(おおの かい) グリー株式会社 開発本部 UI開発チーム •Web制作会社でのフロントエンド開発を経て 2016年にグリー株式会社に入社 •社内のWebフロントエンド開発を主に担当 •
プロダクト、サービスの公式Webサイト • ゲームUI開発などのお手伝い 自己紹介 2
1.GREE Tech Conference 2020のご紹介 2.NuxtJSを選んだ理由 3.目指したこと 4.パフォーマンス改善施策 5.まとめ 目次 3
4 SSR
5 NuxtJSを選んだ理由 5
• JavaScriptフレームワークなら他にも色々 • React、Next.js、GatsbyJS、Svelte、etc... NuxtJSを選んだ理由 6
• Vue、NuxtJSの実績が多かった • 以前からNuxtJSでSSRが試してみたかった • SSRやパフォーマンス改善に注力したかった NuxtJSを選んだ理由 7
8 目指したこと 8
• 動的なOGP切り替え • 高いパフォーマンス 目指したこと 9
10 OGPとは 10
OGPとは 目指したこと 11 • 「Open Graph protocol」の略称 • SNSなどでURLをシェアした時に表示される タイトル、画像、概要などを指定するタグ情報
• JavaScript対応のクローラは動的な変更でも レンダリングしてくれる • Twitter、Facebookなど多くのSNSは非対応 • JavaScriptで切り替えても HTMLに静的に記述されたOGPのみ取得する OGPとは 目指したこと
12
13 動的なOGP切り替え 13
• 擬似的にOGPを切り替える方法として、静的なHTML での対応する方法もあるにはある 動的なOGP切り替え 目指したこと 14 Twitter Facebook Line Slack
etc... セッション ページ OGPのみの ページ リダイレクト Bot OGP取得
本来の用途と異なるリダイレクトを挟むリスク • 検索エンジンへの悪影響 • 表示速度低下によるユーザへの悪影響 動的なOGP切り替え 目指したこと 15
• SSRを行うことで動的な変更も認識されるように 動的なOGP切り替え 目指したこと 16
17 高いパフォーマンス 17
使用したパフォーマンスの計測ツール • Lighthouse(ラボデータ) • PageSpeed Insights (ラボ & フィールドデータ) •
Web Vitals(ラボデータ) 高パフォーマンス 目指したこと 18
• ラボデータ • 制御された環境で収集されるので、パフォーマンスの問題のデバッグに役立ちます。 ただし、実際のボトルネックを捕らえていないおそれがあります。 • フィールドデータ • フィールド データは実際のユーザー
エクスペリエンスをそのまま把握するのに役立 ちますが、使用できる指標セットが限られます。 高パフォーマンス 目指したこと 19 引用元:https://developers.google.com/speed/docs/insights/v5/about?hl=ja
• Web Vitals(Cumulative Layout Shift調査) • Googleの掲げているUX指標であるWeb Vitalsの一つである Cumulative Layout
Shiftの調査が行いやすい 高パフォーマンス 目指したこと 20
21 21 パフォーマンス改善
22 22 改善前の計測
Lighthouse(Desktop) パフォーマンス改善 23
Lighthouse(Mobile) パフォーマンス改善 24
Lighthouse(Mobile) パフォーマンス改善 25 • Webフォントのレンダリングブロックが顕著
Web Vitals パフォーマンス改善 26 • Layout Shiftの影響が大きいページ最下部で ロードして計測
27 27 改善施策
• PWAモジュールの実装 • Web Font Loaderでレンダリングブロック対策 • Layout Shiftが発生しない実装 施策内容
パフォーマンス改善 28
• PWAモジュールの実装 • Web Font Loaderでレンダリングブロック対策 • Layout Shiftが発生しない実装 施策内容
パフォーマンス改善 29
• PWAモジュールを実装して Service Worker(Workbox)でキャッシュ制御 施策内容 パフォーマンス改善 30
• 本サイトの背景には動画を使っている • Safariで動画をキャッシュから取得するために rangeRequestのプラグインを追加 施策内容 パフォーマンス改善 31 rangeRequestについてはnuxt/pwa公式に記載:https://pwa.nuxtjs.org/workbox/
• PWAモジュールの実装 • Web Font Loaderでレンダリングブロック対策 • Layout Shiftが発生しない実装 施策内容
パフォーマンス改善 32
• nuxt-webfontloaderでレンダリングブロック対策 • 非同期でロードしてくれる 施策内容 パフォーマンス改善 33 通常の埋め込みコード
• PWAモジュールの実装 • Web Font Loaderでレンダリングブロック対策 • Layout Shiftが発生しない実装 施策内容
パフォーマンス改善 34
• iOS対策で行っていた、JavaScriptでコンテンツの高さを設定する ようなロジックを排除 • img要素にwidth、height属性を設定 • ブラウザがwidthとheight属性の値をもとに アスペクト比を計算し、画像のスペース確保する (2019年10月にWHATWGが標準化) 施策内容
パフォーマンス改善 35 標準化に関するIssue:Use width and height as intrinsic aspect ratio for img elements
ブラウザの対応状況 パフォーマンス改善 36
37 37 改善後の計測
Lighthouse(Desktop) パフォーマンス改善 38 Before After
Lighthouse(Mobile) パフォーマンス改善 39 Before After
Desktop PageSpeed Insights パフォーマンス改善 40 Mobile
Web Vitals パフォーマンス改善 41 Before After
42 42 まとめ
• 動的なOGP切り替え • 特別な設定の必要なく切り替えできた • フレームワークによってはPrerenderingが◎ • 高いパフォーマンス • SSRとPWAモジュールのおかげで高パフォーマンスが得られた
• JavaScriptが肥大化するならSSGも検討 まとめ 43
None