Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Webサイトパフォーマンスを継続的に計測したい!!! / I want to continuo...
Search
Kentaro Matsushita
December 26, 2020
Programming
630
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
More Decks by Kentaro Matsushita
See All by Kentaro Matsushita
DMMブックスのNext.js化を加速させるAI活用 / Migrating DMM Books to Next.js with AI
kentarom
1
430
開発のアジリティ向上のためのシステムリプレイス ~DMM GAMESの事例~
kentarom
0
880
Denoで簡単なCLIツールを作ってみる / Try to make a simple CLI tool with Deno
kentarom
0
1.1k
GatsbyJSで作った個人ブログの構成を色々見直してみた / Improve my personal blog made with GatsbyJS
kentarom
1
480
Actions ToolkitではじめるGitHub Action開発 / Getting started creating a GitHub Action with Actions Toolkit
kentarom
2
2.1k
GitHub Gistを使って、アクティビティを可視化しよう / Let's try visualizing your activity using the GitHub Gist
kentarom
1
920
OGP画像を生成するNode.jsのライブラリを作ってみた / Create a Node.js module for generating Open Graph image
kentarom
1
7.7k
チームをよしなにする立場を経験して学んだこと / Things I have learned in leading the team
kentarom
0
860
AWSの既存サービスを活用して、 障害検知・復旧を迅速化するカラクリ / JAWS-UG Kanazawa x OpsJAWS
kentarom
2
5k
Other Decks in Programming
See All in Programming
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.5k
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.5k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
520
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
270
Jetpack Compose Mechanisms
skydoves
2
350
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
13
6.5k
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
230
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
120
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
190
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
phperだってパンチカードでコーディングしたい
o0h
PRO
0
200
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
140
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
390
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Being A Developer After 40
akosma
91
590k
Code Review Best Practice
trishagee
74
20k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Faster Mobile Websites
deanohume
310
32k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
The SEO identity crisis: Don't let AI make you average
varn
0
580
Practical Orchestrator
shlominoach
192
12k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
620
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
590
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というパフォーマンス計測ツールを統合する
便利なやつが最近出た これで良いのではという気持ちになっている
パフォーマンス改善の道のりはまだ始 まったばかりだ... 終