Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Site-Speed That Sticks
Search
Harry Roberts
November 14, 2024
Technology
13
1k
Site-Speed That Sticks
Harry Roberts
November 14, 2024
Tweet
Share
More Decks by Harry Roberts
See All by Harry Roberts
How to Think Like a Performance Engineer
csswizardry
28
2.4k
cache rules everything
csswizardry
5
3.6k
My Website Is Slow! Where Do I Start?
csswizardry
5
520
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Get Your Head Straight
csswizardry
15
21k
From Milliseconds to Millions: A Look at the Numbers Powering Web Performance
csswizardry
1
2.6k
More Than You Ever Wanted to Know About Resource Hints
csswizardry
6
9.6k
It’s My (Third) Party, and I’ll Cry if I Want To
csswizardry
13
5.7k
FaCSSt: CSS & Performance
csswizardry
26
4.2k
Other Decks in Technology
See All in Technology
新 Security HubがついにGA!仕組みや料金を深堀り #AWSreInvent #regrowth / AWS Security Hub Advanced GA
masahirokawahara
1
1.9k
Ruby で作る大規模イベントネットワーク構築・運用支援システム TTDB
taketo1113
1
280
生成AI活用の型ハンズオン〜顧客課題起点で設計する7つのステップ
yushin_n
0
140
AI駆動開発における設計思想 認知負荷を下げるフロントエンドアーキテクチャ/ 20251211 Teppei Hanai
shift_evolve
PRO
2
360
プロンプトやエージェントを自動的に作る方法
shibuiwilliam
0
940
GitHub Copilotを使いこなす 実例に学ぶAIコーディング活用術
74th
3
2.9k
AI 駆動開発勉強会 フロントエンド支部 #1 w/あずもば
1ftseabass
PRO
0
350
Snowflakeでデータ基盤を もう一度作り直すなら / rebuilding-data-platform-with-snowflake
pei0804
4
1.4k
Sansanが実践する Platform EngineeringとSREの協創
sansantech
PRO
2
830
コミューンのデータ分析AIエージェント「Community Sage」の紹介
fufufukakaka
0
480
今年のデータ・ML系アップデートと気になるアプデのご紹介
nayuts
1
310
Databricks向けJupyter Kernelでデータサイエンティストの開発環境をAI-Readyにする / Data+AI World Tour Tokyo After Party
genda
1
110
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
57k
Designing for humans not robots
tammielis
254
26k
Become a Pro
speakerdeck
PRO
31
5.7k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Context Engineering - Making Every Token Count
addyosmani
9
510
The World Runs on Bad Software
bkeepers
PRO
72
12k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Transcript
site-speed that sticks
None
hi, i’m harry
None
five key topics
1. metrics 2. localhost 3. backstops 4. monitoring 5. playbook
1. metrics 2. localhost 3. backstops 4. monitoring 5. playbook
1. metrics 2. localhost 3. backstops 4. monitoring 5. playbook
1. metrics 2. localhost 3. backstops 4. monitoring 5. playbook
1. metrics 2. localhost 3. backstops 4. monitoring 5. playbook
1. metrics 2. localhost 3. backstops 4. monitoring 5. playbook
metrics
not all metrics are born equal
different metrics for different people on different occasions with different
levels of disclosure
kpis, enablers, predictors
kpis
definition + target
what are we working toward?
of interest to the business
core web vitals
‘which number on which dashboard of which service?’
“We want a one-second improvement in Largest Contentful Paint.” —
My Client
None
None
None
enablers
metrics that directly influence kpis
of interest to engineering teams
ttfb, input delay
predictors
signals of good/bad performance
highly quantitative
of interest to engineers
bundle size, long tasks, blocking css
great for root-causing and reverse engineering
localhost
localhost is: seldom live-like, pretty dang fast, un-bundled
know your tools inside out
None
None
csswz.it/perfnow25
one weird trick…
None
// plugins/delay.server.ts export default defineNuxtPlugin(async () => { await new
Promise(resolve => setTimeout(resolve, 900)) })
None
None
<head> <link rel=stylesheet href=https://slowfil.es/file?type=css&delay=800> </head>
core web vitals are too big for localhost
if you’re working locally, measure locally
bare-metal metrics
None
None
1
1 2
1 2 3
1 2 3
None
None
1
1 2
1 2 3
1 2 3
external: 1842ms inlined: 1250ms
None
these are very private metrics
backstops
…and budgets
what is the worst possible performance we will accept?
set it to the worst reading in the last release
cycle
None
this is where synthetic testing comes into it
synthetic testing; real user monitoring
when to fail a release
None
predictors as tripwires
None
budgets versus targets
budgets are backstops; targets are ambitions
target == kpi
None
monitoring
the m in rum stands for monitoring
“Insanity is doing the same thing over and over again
and expecting different results.” — Rita Mae Brown
None
🎉
?
None
None
None
None
it’s the exact same file
None
you’re monitoring variation in tests
None
only alert on your kpis
None
None
0.9952409649
None
None
always follow the numbers
playbook
“Fighting regressions took priority over optimizations […]” — Michelle Vu,
Pinterest
None
it’s all for nothing if you don’t have a plan
response = f(severity, duration)
severity
acceptable: <10%
moderate: 10–25%
severe: 25–50%
critical: >50%
duration
temporary: 24–48hr
sustained: >48hr
long-term: >1 release cycle
unresolved: many release cycles
a kpi regression of over 10% for one week requires
remediation in the next sprint
a kpi regression of over 100% for one hour requires
rollback immediately
a kpi regression of over 25% for one day requires
remediation in the current sprint
an enabler regression of over any% for any time needs
the team’s attention over the next sprint
a predictor regression of over any% for any time needs
my attention over the next sprint
you need a framework to fill in these blanks
early triage
who, what, when, where, and why?
what?
what has regressed?
when?
when did it start? is it still like that?
where?
is it a business-critical part of the site?
who?
who owns the problem?
why?
can you conduct early triage?
None
None
None
None
None
None
key takeaways
increase confidence
use the right tool for the right job
have a plan of attack
agree; commit
thank you
harry.is/for-hire