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
530
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
750
Denoで簡単なCLIツールを作ってみる / Try to make a simple CLI tool with Deno
kentarom
0
980
GatsbyJSで作った個人ブログの構成を色々見直してみた / Improve my personal blog made with GatsbyJS
kentarom
1
380
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
800
OGP画像を生成するNode.jsのライブラリを作ってみた / Create a Node.js module for generating Open Graph image
kentarom
1
7.3k
チームをよしなにする立場を経験して学んだこと / Things I have learned in leading the team
kentarom
0
740
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
15分で学ぶDuckDBの可愛い使い方 DuckDBの最近の更新
notrogue
3
830
Kotlinの開発でも AIをいい感じに使いたい / Making the Most of AI in Kotlin Development
kohii00
5
1.9k
Jakarta EE meets AI
ivargrimstad
0
680
Learning Kotlin with detekt
inouehi
1
200
複数のAWSアカウントから横断で 利用する Lambda Authorizer の作り方
tc3jp
0
130
CloudRun, Spanner に対する負荷試験の反省と オブザーバビリティによるアプローチ
oyasumipants
1
160
AIプログラミング雑キャッチアップ
yuheinakasaka
20
5.2k
自力でTTSモデルを作った話
zgock999
0
120
color-scheme: light dark; を完全に理解する
uhyo
7
510
PRレビューのお供にDanger
stoticdev
1
240
AWS Step Functions は CDK で書こう!
konokenj
5
870
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.6k
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Adopting Sorbet at Scale
ufuk
75
9.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
Java REST API Framework Comparison - PWX 2021
mraible
29
8.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
Designing Experiences People Love
moore
140
23k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
Being A Developer After 40
akosma
89
590k
Git: the NoSQL Database
bkeepers
PRO
428
65k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Agile that works and the tools we love
rasmusluckow
328
21k
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というパフォーマンス計測ツールを統合する
便利なやつが最近出た これで良いのではという気持ちになっている
パフォーマンス改善の道のりはまだ始 まったばかりだ... 終