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
良好URLを1%から99%に爆増させたパフォーマンス改善の話
Search
coconala_engineer
July 12, 2023
Technology
0
240
良好URLを1%から99%に爆増させたパフォーマンス改善の話
coconala_engineer
July 12, 2023
Tweet
Share
More Decks by coconala_engineer
See All by coconala_engineer
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
780
「守りのIT」から「攻めの基盤」へ!上場前後でやりきった情シス・モダナイゼーション
coconala_engineer
0
100
障害対応訓練、その前に
coconala_engineer
0
300
生成AI時代を勝ち抜くエンジニア組織マネジメント
coconala_engineer
0
43k
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
600
SwiftTestingによる_モダンなiOSテスト手法とBDD.pdf
coconala_engineer
0
330
SRE × マネジメントレイヤーが挑戦した組織・会社のオブザーバビリティ改革 ― ビジネス価値と信頼性を両立するリアルな挑戦
coconala_engineer
0
990
SIEMを利活用した信頼性向上プロセスと実践
coconala_engineer
0
60
Cursorを使って 新機能開発してみて 感じたこと
coconala_engineer
0
190
Other Decks in Technology
See All in Technology
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1.7k
プロダクト成長を支える開発基盤とスケールに伴う課題
yuu26
4
1.4k
登壇駆動学習のすすめ — CfPのネタの見つけ方と書くときに意識していること
bicstone
3
130
20260208_第66回 コンピュータビジョン勉強会
keiichiito1978
0
200
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
410
GitHub Issue Templates + Coding Agentで簡単みんなでIaC/Easy IaC for Everyone with GitHub Issue Templates + Coding Agent
aeonpeople
1
260
Amazon Bedrock Knowledge Basesチャンキング解説!
aoinoguchi
0
170
Ruby版 JSXのRuxが気になる
sansantech
PRO
0
170
Context Engineeringが企業で不可欠になる理由
hirosatogamo
PRO
3
680
(技術的には)社内システムもOKなブラウザエージェントを作ってみた!
har1101
0
340
20260204_Midosuji_Tech
takuyay0ne
1
160
量子クラウドサービスの裏側 〜Deep Dive into OQTOPUS〜
oqtopus
0
150
Featured
See All Featured
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
440
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
For a Future-Friendly Web
brad_frost
182
10k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
350
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
How STYLIGHT went responsive
nonsquared
100
6k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
120
Google's AI Overviews - The New Search
badams
0
910
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.2k
Prompt Engineering for Job Search
mfonobong
0
160
A Tale of Four Properties
chriscoyier
162
24k
Transcript
Copyright coconala Inc. All Rights Reserved. 良好URLを1%から99%に爆増させた パフォーマンス改善の話
Copyright coconala Inc. All Rights Reserved. アジェンダ 自己紹介 会社紹介 Core
Web Vitals やったこと 2 1 2 3 4
Copyright coconala Inc. All Rights Reserved. 自己紹介 Chapter 01 3
Copyright coconala Inc. All Rights Reserved. 自己紹介 1 4 株式会社ココナラ
プロダクト開発部 フロントエンド開発グループ Team Manager 飯塚 譲二(いいづか じょうじ) • ココナラ歴1年半 • 初心者ながらにココナラのテニス部に所属 • 足のサイズ 30cm アイコンはココナラで発注!
Copyright coconala Inc. All Rights Reserved. 自己紹介 1 5 株式会社ココナラ
プロダクト開発部 フロントエンド開発グループ 加藤 大河(かとう たいが) • ココナラ歴8年 • 趣味:ランチ探検 ◦ 渋谷 550軒 ◦ 五反田 400軒 アイコンはココナラで発注!
Copyright coconala Inc. All Rights Reserved. 会社紹介 Chapter 02 6
Copyright coconala Inc. All Rights Reserved. 会社紹介 2 7
Copyright coconala Inc. All Rights Reserved. 会社紹介(coconala.comで使用している技術スタック) 2 8 フロントエンド
API ※一部CakePHPで動いている画面もあり ゲートウェイ gRPC gRPC
Copyright coconala Inc. All Rights Reserved. Core Web Vitals Chapter
03 9
Copyright coconala Inc. All Rights Reserved. Web Vitalsとは、ウェブ上でより優れたユーザーエクスペリエンス(UX)を提供するため に、Googleが提唱している指標のこと
Core Web Vitalsとは、Web Vitalsの中でも特に重点的に計測する必要がある以下3つ の指標のこと ・LCP(Largest Contentful Paint) ・FID(First Input Delay) ・CLS(Cumulative Layout Shift) Core Web Vitals 3 Core Web Vitalsとは 10
Copyright coconala Inc. All Rights Reserved. LCPとは、Largest Contentful Paintの略で「 ビューポート内に表示される最も大きいコンテ
ンツ(画像やテキスト ブロック)のレンダリング時間」を表す指標になります Core Web Vitals 3 LCPとは 11 引用元:https://web.dev/
Copyright coconala Inc. All Rights Reserved. Core Web Vitals 3
12 PC モバイル ココナラのサービスページ
Copyright coconala Inc. All Rights Reserved. 13 どうやって Core Web
Vitalsを モニタリングしているの?
Copyright coconala Inc. All Rights Reserved. Core Web Vitals 3
モニタリング方法 14 ・Google Search Console ・Grafana
Copyright coconala Inc. All Rights Reserved. メリット ・Googleが提供しているツールなので値に正確性がある
デメリット ・検索ができない(過去のデータを探せない) ・最新のデータ反映が遅い Core Web Vitals 3 Google Search Console 15
Copyright coconala Inc. All Rights Reserved. Core Web Vitals 3
16
Copyright coconala Inc. All Rights Reserved. Core Web Vitals 3
Grafana 17 メリット ・反映が早い ・過去のデータが残っており、期間やページ単位で検索ができる デメリット ・自前で実装する必要があるため、準備に工数がかかる ※ web-vitalsというライブラリを使用してlogを出し、Grafanaで可視化しております。 ・データが増えると重い
Copyright coconala Inc. All Rights Reserved. Core Web Vitals 3
18
Copyright coconala Inc. All Rights Reserved. 19 どうやって ボトルネックを 判断しているの?
Copyright coconala Inc. All Rights Reserved. Core Web Vitals 3
ボトルネック調査 20 ・PageSpeed Insights ・Google Chrome DevToolsのLighthouse ・Google Chrome DevToolsのPerformance Insights
Copyright coconala Inc. All Rights Reserved. 21 パフォーマンス改善を行った 結果、こうなりました!
Copyright coconala Inc. All Rights Reserved. Core Web Vitals 3
良好URL数が1% → 99% 22 1%から 99%へ! 一度50%達成 => 30%弱までダウン
Copyright coconala Inc. All Rights Reserved. Core Web Vitals 3
改善結果 23
Copyright coconala Inc. All Rights Reserved. やったこと Chapter 04 24
Copyright coconala Inc. All Rights Reserved. 25 目次 1. ロジック
2. 画像 3. バンドルサイズ 4. その他 5. 結果
Copyright coconala Inc. All Rights Reserved. 無駄な処理の改善 初期表示に不要な処理は後回しにする 無駄な直列処理(特にAPIコール)を修正 NuxtであればnuxtServerInitなど、全ページで共通の処理は
影響が大きいため要確認 ヘッダーなどの共通コンポーネントも影響大 やったこと:ロジック 4 ロジックの修正 26
Copyright coconala Inc. All Rights Reserved. 画像の属性 imgタグには原則 loading="lazy" decoding="async"
を付け ておく ただし画像がLCP要素の場合は付けず、代わりに fetchpriority="high" を付ける loading="lazy" : 画像を遅延読込させる decoding="async" : 画像のデコード処理を非同期化する fetchpriority="high" : 読み込みの優先度を高める やったこと:画像 4 画像の最適化 27
Copyright coconala Inc. All Rights Reserved. 画像の圧縮(次世代フォーマット化) ユーザーがアップロードした画像を、WebPやAVIFに変換して 圧縮 Akamaiの「Image
& Video Manager」というサービスを利用 して、CDN上で自動的に変換 やったこと:画像 4 画像の最適化 28
Copyright coconala Inc. All Rights Reserved. Webpack Bundle Analyzer Webpack
Bundle Analyzerでバンドルサイズを可視化 大きなプラグインや無駄にインポートされているコンポーネント など、問題点を分析 やったこと:バンドルサイズ 4 バンドルサイズの分析 29
Copyright coconala Inc. All Rights Reserved. やったこと:バンドルサイズ 4 バンドルサイズの分析 30
Copyright coconala Inc. All Rights Reserved. プラグインの削減 サイズが大きい割に一部でしか使っておらず、自前で代替で きるようなプラグインは削除 全ページで読み込む必要のないプラグインは該当箇所でのみ
読み込むようにする サーバー側で不要なプラグインはクライアント側で読み込むよ うにする やったこと:バンドルサイズ 4 バンドルサイズの削減 31
Copyright coconala Inc. All Rights Reserved. ポリフィルの削減 無駄に古いブラウザをサポートしているとポリフィルのサイズ が大きくなるため、古いままだった推奨動作環境や社内のサ ポート基準を見直して更新
ターゲットブラウザの設定(browserslist)を合わせて更新する ことでポリフィル削減 IE用のプラグインも削除 やったこと:バンドルサイズ 4 バンドルサイズの削減 32
Copyright coconala Inc. All Rights Reserved. ダイナミックインポート化 通常のインポートだとその場でインポートされるが、条件に よって使われない場合があると無駄になる ダイナミックインポートにして、使われる場合のみインポートさ
れるようにする やったこと:バンドルサイズ 4 バンドルサイズの削減 33
Copyright coconala Inc. All Rights Reserved. 組み合わせで事故の危険性あり サーバーとクライアントのレンダリング結果が一致しないとエ ラーになるため、サーバーとクライアントで結果が変わる出し 分けがある箇所に対してはダイナミックインポートを使わない
よう注意 ダイナミックインポートにした子コンポーネントの中の、孫コン ポーネント内の出し分け等も確認する必要あり やったこと:バンドルサイズ 4 ダイナミックインポートの注意点 34 (isPC はブラウザの横幅によって変わるフラグ)
Copyright coconala Inc. All Rights Reserved. webpack-bundle-analyzer(削減結果) app.jsは約40%削減 vendors/app.jsは約22%削減 やったこと:バンドルサイズ
4 バンドルサイズの削減結果 35 2022/06 2023/06
Copyright coconala Inc. All Rights Reserved. 初期表示に不要な要素をCSR化 LCP要素を優先して不要なものは後回しにするため、初期表 示に不要な要素はクライアントサイドでレンダリングさせる クリックしたら出るモーダルや、遅れて表示されても問題ない
バルーンなど やったこと:その他 4 クライアントサイドレンダリング化 36
Copyright coconala Inc. All Rights Reserved. 通信経路を短縮 サーバーサイドのAPI通信はAWS内部で通信させるようにす る クライアントサイドの通信はインターネット経由のままにするた
め、CSRとSSRでAPIのURLを変える やったこと:その他 4 API通信の内部化 37
Copyright coconala Inc. All Rights Reserved. Node.js(&V8エンジン)のアップデート Node.jsが古いと、内部のJavaScript実行エンジン(V8エンジ ン)も古い アップデートすることでサーバーサイドのパフォーマンスが改
善できた やったこと:その他 4 Node.jsのアップデート 38
Copyright coconala Inc. All Rights Reserved. やったこと:結果 4 結果 40回弱リリースを繰り返し、徐々に改善
良好URL1%から99%へ 39
Copyright coconala Inc. All Rights Reserved. 40 最後に Chapter 05
40
Copyright coconala Inc. All Rights Reserved. 最後に 5 ココナラでは エンジニアを募集しております
41
人生の可能性を広げたユーザーストーリー わたしのスキル解放記 https://blog.coconala.co.jp/m/me8a586112ad2 ココナラの人と組織を伝えるブログ ココナラLIVE https://blog.coconala.co.jp/m/m4e4abe8b17e5 More Info 42 ココナラに所属するエンジニアによるブログ
テックブログ https://zenn.dev/coconala エンジニア採用ホームページ https://coconala.co.jp/recruit/engineer 採用ホームページ https://coconala.co.jp/recruit
Copyright coconala Inc. All Rights Reserved. 43 パフォーマンス改善の内容は テックブログでも公開しています
一人ひとりが 「自分のストーリー」を 生きていく世の中をつくる ユーザーにとって見えていなかった無数の可能性の扉を開く、 そこにエンジニアとして一緒に貢献しませんか。