Pushing Webperf Limits - We Love Speed 2024.pptx

scalerotors9 19 views 159 slides Sep 19, 2024
Slide 1
Slide 1 of 159
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66
Slide 67
67
Slide 68
68
Slide 69
69
Slide 70
70
Slide 71
71
Slide 72
72
Slide 73
73
Slide 74
74
Slide 75
75
Slide 76
76
Slide 77
77
Slide 78
78
Slide 79
79
Slide 80
80
Slide 81
81
Slide 82
82
Slide 83
83
Slide 84
84
Slide 85
85
Slide 86
86
Slide 87
87
Slide 88
88
Slide 89
89
Slide 90
90
Slide 91
91
Slide 92
92
Slide 93
93
Slide 94
94
Slide 95
95
Slide 96
96
Slide 97
97
Slide 98
98
Slide 99
99
Slide 100
100
Slide 101
101
Slide 102
102
Slide 103
103
Slide 104
104
Slide 105
105
Slide 106
106
Slide 107
107
Slide 108
108
Slide 109
109
Slide 110
110
Slide 111
111
Slide 112
112
Slide 113
113
Slide 114
114
Slide 115
115
Slide 116
116
Slide 117
117
Slide 118
118
Slide 119
119
Slide 120
120
Slide 121
121
Slide 122
122
Slide 123
123
Slide 124
124
Slide 125
125
Slide 126
126
Slide 127
127
Slide 128
128
Slide 129
129
Slide 130
130
Slide 131
131
Slide 132
132
Slide 133
133
Slide 134
134
Slide 135
135
Slide 136
136
Slide 137
137
Slide 138
138
Slide 139
139
Slide 140
140
Slide 141
141
Slide 142
142
Slide 143
143
Slide 144
144
Slide 145
145
Slide 146
146
Slide 147
147
Slide 148
148
Slide 149
149
Slide 150
150
Slide 151
151
Slide 152
152
Slide 153
153
Slide 154
154
Slide 155
155
Slide 156
156
Slide 157
157
Slide 158
158
Slide 159
159

About This Presentation

In this deep dive talk, we’ll skip the basics and look at some advanced tuning techniques to make a modern website lightning fast.

Using plenty of graphs and data, we’ll show how these solutions have helped make scalemates.com the fastest (and largest) scale modeling website in the world.

Afte...


Slide Content

Pushing # WebPerf Limits @TimVereecke

WE LOVE SPEED

WE (REALLY) LOVE SPEED

Why bother?

CORE WEB VITALS GOOD NEEDS IMPROVEMENT POOR

75% GOOD

75% GOOD GOOD ENOUGH?

SEO: Yes! UX: No! 75% GOOD GOOD ENOUGH?

SEO: Yes! UX: Nooooo ! 75% GOOD 25% NOT GOOD GOOD ENOUGH?

90% How to get here?

95% How to get here?

98% How to get here?

99% How to get here?

1. COMMON PRACTICES 2. DESIGN CHOICES 3. FRESH TECHNIQUES

1. COMMON PRACTICES 2. DESIGN CHOICES 3. FRESH TECHNIQUES

1. COMMON PRACTICES Minification H3 CDN Fast DNS TLS 1.3 AVIF/WEBP Brotli Remove unused … fetchpriority=high Reduce JS 103 Early Hints Preload fonts Tuned DB Long max-age preconnect Use srcset Loading=lazy .woff2 Keep-alive No document.write () … BfCache Reduce 3 rd parties Reduce DOM Elements

97 1. COMMON PRACTICES

1. COMMON PRACTICES 2. DESIGN CHOICES 3. FRESH TECHNIQUES

Pushing the limits Design Choices

2011 requestmap.herokuapp.com

2024 requestmap.herokuapp.com

2011 MPA

2024 MPA

Pushing the limits CLS

GOOD NEEDS IMPROVEMENT POOR 0.100 0.250 CLS

GOOD NEEDS IMPROVEMENT POOR 0.100 0.250 CLS 0.000

0.002

html{ overflow-y:scroll ; scrollbar-gutter:stable }

Ad Blockers

970x90 300x250

<style> .bannerAd{width:300px;height:250px} </style>

<style> .av{width:300px;height:250px} </style> Extra Wrapper

<style> .av{width:300px;height:250px} </style> Extra Wrapper

HTML Streaming

FCP

FCP FCP+

FCP FCP+

FCP FCP+

<body class="bgl"> <body class=bgl>

21 lines, 2484 bytes

9 lines, 1009 bytes

Logged in User

<link rel =expect href =… blocking=render >

Chrome 124 (experimental)

GOOD NEEDS IMPROVEMENT POOR 0.100 0.250 EXPECTED 0.000

GOOD NEEDS IMPROVEMENT POOR 0.100 0.250 CLS Frequency EXPECTED 0.000

GOOD NEEDS IMPROVEMENT POOR 0.100 0.250 CLS Frequency EXPECTED 0.000 % of pageviews with any layout shift

# AimForZero

Wild Wild Web

Pushing the limits LCP

GOOD NEEDS IMPROVEMENT POOR 2.5s 4.0s LCP

<picture> <source media=" (min-width:1440px) " srcset=" 1080.jpg 1x, 1440.jpg 1.5x, 2160.jpg 2x " > <source media=" (min-width:700px) " srcset=" 720.jpg 1x, 1080.jpg 1.5x, 1440.jpg 2x " > <source media=" (min-width:500px) " srcset=" 540.jpg 1x, 720.jpg 1.5x, 1080.jpg 2x " > <source media=" (max-width:500px) " srcset=" 360.jpg 1x, 540.jpg 1.5x, 720.jpg 2x " > < img fetchpriority= high src= 720.jpg … > </picture>

<picture> <source media=" (min-width:1440px) " srcset=" 1080.jpg 1x, 1440.jpg 1.5x, 2160.jpg 2x " > <source media=" (min-width:700px) " srcset=" 720.jpg 1x, 1080.jpg 1.5x, 1440.jpg 2x " > <source media=" (min-width:500px) " srcset=" 540.jpg 1x, 720.jpg 1.5x, 1080.jpg 2x " > <source media=" (max-width:500px) " srcset=" 360.jpg 1x, 540.jpg 1.5x, 720.jpg 2x " > < img fetchpriority= high src= 720.jpg … > </picture>

<picture> <source media=" (min-width:1440px) " srcset=" 1080.jpg 1x, 1440.jpg 1.5x, 2160.jpg 2x " > <source media=" (min-width:700px) " srcset=" 720.jpg 1x, 1080.jpg 1.5x, 1440.jpg 2x " > <source media=" (min-width:500px) " srcset=" 540.jpg 1x, 720.jpg 1.5x, 1080.jpg 2x " > <source media=" (max-width:500px) " srcset=" 360.jpg 1x, 540.jpg 1.5x, 720.jpg 2x " > < img fetchpriority= high src= 720.jpg … > </picture>

<picture> <source media=" (min-width:1440px) " srcset=" 1080.jpg 1x, 1440.jpg 1.5x, 2160.jpg 2x " > <source media=" (min-width:700px) " srcset=" 720.jpg 1x, 1080.jpg 1.5x, 1440.jpg 2x " > <source media=" (min-width:500px) " srcset=" 540.jpg 1x, 720.jpg 1.5x, 1080.jpg 2x " > <source media=" (max-width:500px) " srcset=" 360.jpg 1x, 540.jpg 1.5x, 720.jpg 2x " > < img fetchpriority= high src= 720.jpg … > </picture>

<picture> <source media=" (min-width:1440px) " srcset=" 1080.jpg 1x, 1440.jpg 1.5x, 2160.jpg 2x " > <source media=" (min-width:700px) " srcset=" 720.jpg 1x, 1080.jpg 1.5x, 1440.jpg 2x " > <source media=" (min-width:500px) " srcset=" 540.jpg 1x, 720.jpg 1.5x, 1080.jpg 2x " > <source media=" (max-width:500px) " srcset=" 360.jpg 1x, 540.jpg 1.5x, 720.jpg 2x " > < img fetchpriority= high src= 720.jpg … > </picture>

<picture> <source media=" (min-width:1440px) " srcset=" 1080.jpg 1x, 1440.jpg 1.5x, 2160.jpg 2x " > <source media=" (min-width:700px) " srcset=" 720.jpg 1x, 1080.jpg 1.5x, 1440.jpg 2x " > <source media=" (min-width:500px) " srcset=" 540.jpg 1x, 720.jpg 1.5x, 1080.jpg 2x " > <source media=" (max-width:500px) " srcset=" 360.jpg 1x, 540.jpg 1.5x, 720.jpg 2x " > < img fetchpriority= high src= 720.jpg … > </picture> CDN Efficiency

CDN Efficiency Dimensions Edge Hits 2160px 965 1440px 3561 1080px 6203 720px 9011 540px 323 360px 153

CDN Efficiency Dimensions Edge Hits 2160px 965 1440px 3561 1080px 6203 720px 9011 540px 323 360px 153

<picture> <source media=" (min-width:1440px) " srcset=" 1080.jpg 1x, 1440.jpg 1.5x, 2160.jpg 2x " > <source media=" (min-width:700px) " srcset=" 720.jpg 1x, 1080.jpg 1.5x, 1440.jpg 2x " > <source media=" (min-width:500px) " srcset=" 540.jpg 1x, 720.jpg 1.5x, 1080.jpg 2x " > <source media=" (max-width:500px) " srcset=" 360.jpg 1x , 540.jpg 1.5x, 720.jpg 2x " > < img fetchpriority= high src= 720.jpg … > </picture> CDN Efficiency

< img srcset= "540.jpg 540w, 720.jpg 720w, 1080.jpg 1080w, 1440.jpg 1440w, 2160.jpg 2160w … >

< img srcset= "540.jpg 540w, 720.jpg 720w, 1080.jpg 1080w, 1440.jpg 1440w, 2160.jpg 2160w … > No DPR Capping

< img srcset= "540.jpg 540w, 720.jpg 720w, 1080.jpg 1080w, 1440.jpg 1440w , 2160.jpg 2160w … > Viewport 360px DPR 4x No DPR Capping

Wrong LCP Candidates

LCP Candidate

LCP Candidate

Late discovered = SLOW

Plan A: Send more bytes

Plan B: Fast Fallback Banner Fast Fallback Banner

Plan B: Fast Fallback Banner Early discovered < img >

Plan B: Fast Fallback Banner Early discovered < img >

Beating Latency

High Latency

Old School

Old School

Replication Test

Before After

Q1 2023

Today

Potential

DE-FRA US-SFO US-EWR 150 ms faster

Before Distributed Cloud Search Facets Performance 90ms faster

Redirects

Redirects Are STUPID!!!

Redirect Liquidation

Request Old URL

Request Old URL See New URL

Request Old URL Redirect Liquidated See New URL

Not a Crawler

Full Partial Before

HTML Browser Caching

… B Guest network ma=90 #2 network ma=300 C Guest #3 network ma=90 G Guest #9 network ma=600 F Guest #8 network ma=300 E Guest #7 cached age=89 A Guest #6 network ma=600 D Guest #5 cached age=28 B Guest #4 Repeated A Guest #1 network ma=600

… B Guest network ma=90 #2 network ma=300 C Guest #3 network ma=90 G Guest #9 network ma=600 F Guest #8 network ma=300 E Guest #7 cached age=89 A Guest #6 network ma=600 D Guest #5 cached age=28 B Guest #4 Repeated A Guest #1 network ma=600 Repeated

… B Guest network ma=90 #2 A Guest network ma=600 #1 network ma=300 C Guest #3 network ma=90 G Guest #9 network ma=600 F Guest #8 network ma=300 E Guest #7 cached age=89 A Guest #6 network ma=600 D Guest #5 cached age=28 B Guest #4 Repeated

The problem starts here…

… B Guest network ma=90 #2 A Guest network ma=600 #1 network ma=300 C Guest #3 network no-cache G Logged in #9 network no-cache F Logged in #8 network no-cache E Logged in #7 cached age=89 A Guest #6 network no-cache D Logged in #5 cached age=28 B Guest #4 Wrong Context Logged in user thinks they are logged out Repeated Log in

… B Guest network ma=90 #2 A Guest network ma=600 #1 network no-cache G Logged in #9 network no-cache F Logged in #8 network no-cache E Logged in #7 network ma=300 C Guest #3 cached age=89 A Guest #6 network no-cache D Logged in #5 cached age=28 B Guest #4 Wrong Context Logged in user thinks they are logged out Repeated max(max-ages)=mma RLI Risk Zone Log in

Clear-Site-Data: cache

Clear-Site-Data: cache Before Reverted 60s 30s 45s 15s LCP over time

RLI-BCB

Recently Logged In Browser Cache Bypassing

RLI Risk Zone

Standard RLI Risk Zone

Removes ?rli=1 in the browser

… B Guest network ma=90 #2 A Guest network ma=600 #1 network ma=300 C Guest #3 network no-cache G Logged in #9 network no-cache F ?rli=1 Logged in #8 network no-cache E ?rli=1 Logged in #7 network no-cache A ?rli=1 Logged in #6 network no-cache D ?rli=1 Logged in #5 cached age=28 B Guest #4 Repeated max(max-ages)=mma Log in RLI Risk Zone Remove ?rli=1 in browser 3 Link to A?rli=1 on server 2 Add Cookie RLI=1 on server 1

Progressive Speculation

Nearly INSTANT performance

<script type=" speculationrules "> {" prerender ": [{"source": " document ","where ":{" selector_matches":"nav a, a.article "}," eagerness ":"moderate "} ]} </script> https:// developer.mozilla.org / en -US/docs/Web/API/ Speculation_Rules_API

<script type=" speculationrules "> {" prerender ": [{"source": " document ","where ":{" selector_matches":"nav a, a.article "}," eagerness ":"moderate "} ]} </script> Action prerender | prefetch https:// developer.mozilla.org / en -US/docs/Web/API/ Speculation_Rules_API

<script type=" speculationrules "> {" prerender ": [{"source": " document ","where ":{" selector_matches":"nav a, a.article "}," eagerness ":"moderate "} ]} </script> Action prerender | prefetch Eagerness eager | moderate | conservative https:// developer.mozilla.org / en -US/docs/Web/API/ Speculation_Rules_API

-700 -300 -200 -300 -100 - 100 100 300 200 500 400 700 800 | | | | | | | | | | | | | | | | Click Conservative (Prefetch) +200ms Page A Moderate (Prefetch) Standard -400 -700 | | Page B LCP LCP LCP

-700 -300 -200 -300 -100 - 100 100 300 200 500 400 700 800 | | | | | | | | | | | | | | | | Click Conservative (Prefetch) +200ms Page A Moderate (Prefetch) Standard -400 -700 | | Page B Mouse Down LCP LCP LCP

-700 -300 -200 -300 -100 - 100 100 300 200 500 400 700 800 | | | | | | | | | | | | | | | | Click Conservative (Prefetch) +200ms Page A Moderate (Prefetch) Standard -400 -700 | | Page B Mouse Down LCP LCP LCP

-700 -300 -200 -300 -100 - 100 100 300 200 500 400 700 800 Hover | | | | | | | | | | | | | | | | Click Conservative (Prefetch) Page A Moderate (Prefetch) Standard -400 -700 | | Page B Mouse Down LCP LCP LCP +200ms

-700 -300 -200 -300 -100 - 100 100 300 200 500 400 700 800 Hover | | | | | | | | | | | | | | | | Click Conservative (Prerender) Page A Moderate (Prerender) Standard -400 -700 | | Page B Mouse Down LCP LCP LCP +200ms

-700 -300 -200 -300 -100 - 100 100 300 200 500 400 700 800 Hover | | | | | | | | | | | | | | | | Click Conservative (Prerender) +200ms Page A Moderate (Prerender) -400 -700 | | Page B Mouse Down LCP LCP LCP Standard

-700 -300 -200 -300 -100 - 100 100 300 200 500 400 700 800 Hover | | | | | | | | | | | | | | | | Click Conservative (Prerender) +200ms Page A Moderate (Prerender) -400 -700 | | Page B Mouse Down LCP LCP LCP Standard

-700 -300 -200 -300 -100 - 100 100 300 200 500 400 700 800 Hover | | | | | | | | | | | | | | | | Click Page A -400 -700 | | Page B Mouse Down LCP Standard LCP Conservative (Progressive) 1 2

-700 -300 -200 -300 -100 - 100 100 300 200 500 400 700 800 Hover | | | | | | | | | | | | | | | | Click Page A -400 -700 | | Page B Mouse Down LCP LCP Standard LCP Conservative (Progressive) Moderate (Progressive) +200ms 1 2

Pushing the limits INP

MPA

Beyond CWV

2.25x more pixels 1080px 720px

View Transitions 100ms “slower”

CORE WEB VITALS

P75

P99

Thank you! @TimVereecke

Questions? @TimVereecke