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
Webサイトパフォーマンスを継続的に計測したい!!! / I want to continuo...
Search
Kentaro Matsushita
December 26, 2020
Programming
2
550
Webサイトパフォーマンスを継続的に計測したい!!! / I want to continuously measure my website performance!!!
Kanazawa.js Remote Meetup #09
https://kanazawajs.connpass.com/event/197989/
Kentaro Matsushita
December 26, 2020
Tweet
Share
More Decks by Kentaro Matsushita
See All by Kentaro Matsushita
開発のアジリティ向上のためのシステムリプレイス ~DMM GAMESの事例~
kentarom
0
770
Denoで簡単なCLIツールを作ってみる / Try to make a simple CLI tool with Deno
kentarom
0
1k
GatsbyJSで作った個人ブログの構成を色々見直してみた / Improve my personal blog made with GatsbyJS
kentarom
1
400
Actions ToolkitではじめるGitHub Action開発 / Getting started creating a GitHub Action with Actions Toolkit
kentarom
2
1.9k
GitHub Gistを使って、アクティビティを可視化しよう / Let's try visualizing your activity using the GitHub Gist
kentarom
1
820
OGP画像を生成するNode.jsのライブラリを作ってみた / Create a Node.js module for generating Open Graph image
kentarom
1
7.4k
チームをよしなにする立場を経験して学んだこと / Things I have learned in leading the team
kentarom
0
760
AWSの既存サービスを活用して、 障害検知・復旧を迅速化するカラクリ / JAWS-UG Kanazawa x OpsJAWS
kentarom
2
4.7k
DMM.comの認証基盤を支えるエラー通知の仕組み / AWS Dev Day Tokyo 2018 Lightning Talk
kentarom
2
14k
Other Decks in Programming
See All in Programming
"使いづらい" をリバースエンジニアリングする UI の読み解き方
rebase_engineering
0
110
Zennの運営完全に理解した #完全に理解したTalk
wadayusuke
1
140
try-catchを使わないエラーハンドリング!? PHPでResult型の考え方を取り入れてみよう
kajitack
3
320
ts-morph実践:型を利用するcodemodのテクニック
ypresto
1
540
型付け力を強化するための Hoogle のすゝめ / Boosting Your Type Mastery with Hoogle
guvalif
1
230
【TSkaigi 2025】これは型破り?型安全? 真実はいつもひとつ!(じゃないかもしれない)TypeScript クイズ〜〜〜〜!!!!!
kimitashoichi
1
300
UPDATEがシステムを複雑にする? イミュータブルデータモデルのすすめ
shimomura
0
200
#QiitaBash TDDでAIに設計イメージを伝える
ryosukedtomita
2
1.6k
PT AI без купюр
v0lka
0
200
TypeScript Language Service Plugin で CSS Modules の開発体験を改善する
mizdra
PRO
3
2.4k
テスト分析入門/Test Analysis Tutorial
goyoki
11
2.7k
ユーザーにサブドメインの ECサイトを提供したい (あるいは) 2026年函館で一番熱くなるかもしれない言語の話
uvb_76
0
180
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
298
21k
Practical Orchestrator
shlominoach
188
11k
Stop Working from a Prison Cell
hatefulcrawdad
269
20k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.8k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
620
Designing for Performance
lara
608
69k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
Unsuck your backbone
ammeep
671
58k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Scaling GitHub
holman
459
140k
Automating Front-end Workflow
addyosmani
1370
200k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Transcript
Webサイトパフォーマンスを継続的に 計測したい!!! Kanazawa.js Meetup #09 2020.12.26 @_kentaro_m
⾃⼰紹介 @_kentaro_m ⾦沢市内のゲーム会社で働くフロントエンドエンジニア レガシーなシステムを新しくする仕事をしてます 最近触っている技術 Next.js / GraphQL / Kubernetes
今⽇話すこと Webサイトパフォーマンスを継続的に計測する基盤をサーバー レスアーキテクチャで作った話 - Qiita アドベントカレンダーの内容を簡潔に話します。
Q. みなさんの職場ではWebサイトパ フォーマンス計測していますか?
A. うちは計測してます (但し書きあり)
A. うちは計測してます ⼤きなリリースなどの節⽬のタイミングでは⼈⼒で計測 継続的に計測できていない ※ 現状Chrome DevToolsからLighthouse⼿動実⾏
閑話休題:パフォーマンス計測⼿法 Synthetic Monitoring Real User Monitoring ⽬的に応じて、使い分ける必要がある。
Synthetic Monitoring Synthetic Monitoring 定められた環境からWebサイトにリクエストを送信して、 パフォーマンス計測 計測環境はばらつきが少ないが、ユーザー環境との剥離が ある可能性 ツール例:WebPageTestやLighthouse
Real User Monitoring Real User Monitoring ユーザー閲覧環境で何らかの仕組みが実⾏され、計測サー バーにパフォーマンスが送信される ユーザー環境によって、結果にばらつきが出る ツール例:Datadog
RUM
パフォーマンス計測する理由 パフォーマンスはユーザー体験に⼤きな影響を与える要素 GoogleはCore Web Vitalsを発表 Webサイトのユーザー体験の質を定量的に⽰す指標 ⾃社サイトのユーザー体験改善のために時系列でパフォーマ ンス変化を分かるようにしたい 継続的に計測しないと良し悪しがわからない
パフォーマンス計測基盤を作ってみる (アドベントカレンダーのネタにちょうどいい!)
システム要件 特定の複数URLに対して、Lighthouseを定期実⾏ 実⾏結果のストレージ保存や外部サービス送信サポート 外部サービスはDatadogやSlackなどを想定 何らかのツールを使って、実⾏結果が可視化できること 各指標ごとにグラフを作れて、時系列で推移が確認できる ものをイメージ
システム構成 (画⾯共有します。図が⼤きくて収まらなかった...)
処理フロー . 複数のURLのLighthouse実⾏命令をキューに送信 . キューからメッセージ受信、ワークフロー呼び出し . Lighthouseを実⾏ . Lighthouse実⾏結果を外部サービスに送信
定期実⾏管理 CloudWatch Eventsに登録のcron式ベースで定期実⾏ サイトリストベースでLighthouse実⾏命令をSQSに送信 SQSからメッセージ受信し、ワークフロー並列呼び出し sites: - title: Foo url:
https://foo.example.com/ - title: Bar url: https://bar.example.com/ - title: Baz url: https://baz.example.com/
Lighthouse実⾏ Chromiumをヘッドレス起動、対象URLへLighthouse実⾏ Lambda向けに最適化されたChromiumバイナリ使⽤ Lambdaメモリ割り当て1GB、タイムアウト600秒
外部サービス連携
外部サービス連携 Lighthouseの実⾏と実⾏結果の外部サービス連携 実⾏結果をS3やスプレッドシートへの送信サポート 複数のLambda連携はStep Functionsを利⽤ Lambdaの呼び出し順序や⼊出⼒値の調整 JSON形式の⾔語で定義 責務ベースでLambda分割、疎結合な連携を実現 Lambdaを増やすと、他のサービスと連携可能
データ可視化
データ可視化 Data PortalでLighthouse実⾏結果を可視化 実⾏結果データセットへBigQueryを実⾏ BigQuery Data Transfer ServiceでS3からデータ取り込み 実⾏結果はJSON形式でS3に保存 1⽇1回定期実⾏でBigQueryに取り込み
さいごに Lighthouse実⾏結果の各指標をData Portalで可視化できた まずは今後の改善に向けて、現状把握に利⽤していきたい サーバーレスアーキテクチャでやりたいことが実現できた Lighthouseの並列実⾏ 拡張性を有した外部サービス連携 Auto Web Perfというパフォーマンス計測ツールを統合する
便利なやつが最近出た これで良いのではという気持ちになっている
パフォーマンス改善の道のりはまだ始 まったばかりだ... 終