@sendilkumarn
Engineering Manager @ Uber
🇮🇳 / 🇳🇱
Sendil Nellaiyapen
Right now learning Zig-lang
Slide 13
Slide 13 text
@sendilkumarn
Engineering Manager @ Uber
🇮🇳 / 🇳🇱
Sendil Nellaiyapen
Right now learning Zig-lang
GDE Web Performance
Slide 14
Slide 14 text
@sendilkumarn
What would you like to see in the
session?
Slide 15
Slide 15 text
@sendilkumarn
What would you like to see in the
session?
Code
Slide 16
Slide 16 text
@sendilkumarn
What would you like to see in the
session?
Code
Light
Slide 17
Slide 17 text
@sendilkumarn
What would you like to see in the
session?
Code Common
Light
Slide 18
Slide 18 text
@sendilkumarn
What would you like to see in the
session?
Code Common
Light
Rendering
Slide 19
Slide 19 text
@sendilkumarn
What would you like to see in the
session?
Code Common
Light
Rendering
Saga
Slide 20
Slide 20 text
@sendilkumarn
How websites work?
Browser Server
Slide 21
Slide 21 text
@sendilkumarn
How websites work?
Browser
Redirect
GET /
Server
Slide 22
Slide 22 text
@sendilkumarn
How websites work?
Browser
Redirect
GET /
Server
Cache
Slide 23
Slide 23 text
@sendilkumarn
How websites work?
Browser
Redirect
GET /
Server
Cache DNS
Slide 24
Slide 24 text
@sendilkumarn
How websites work?
Browser
Redirect
GET /
Server
Cache DNS TCP
Slide 25
Slide 25 text
@sendilkumarn
How websites work?
Browser
Redirect
GET /
Server
Cache DNS TCP TLS
Slide 26
Slide 26 text
@sendilkumarn
How websites work?
Browser
Redirect
GET /
Server
Cache DNS TCP TLS
Resp
Slide 27
Slide 27 text
@sendilkumarn
How websites work?
Browser
Redirect
GET /
Server
Cache DNS TCP TLS
Resp
HTML
Slide 28
Slide 28 text
@sendilkumarn
How websites work?
Browser
Redirect
GET /
Server
Cache DNS TCP TLS
Resp
Process
HTML
Slide 29
Slide 29 text
@sendilkumarn
How websites work?
Browser
Redirect
GET /
Server
Cache DNS TCP TLS
Resp
Process
Load
HTML
Slide 30
Slide 30 text
@sendilkumarn
How websites work?
Browser
Redirect
GET /
Server
Cache DNS TCP TLS
Resp
Process
Load
Time To First Byte
HTML
TTFB
Slide 31
Slide 31 text
@sendilkumarn
Web Performance Terminologies
TTFB
TTI
LCP
FID
FCP
Main thread
Prefetch
Preload
CLS
TBT
CWV
Core Web Vital
INP
Req Res
Jargon alert!!!
Slide 32
Slide 32 text
@sendilkumarn
Time To First Byte TTFB
Slide 33
Slide 33 text
@sendilkumarn
0.3 - 3s
human attention span
Slide 34
Slide 34 text
@sendilkumarn
Hello World
…
Slide 35
Slide 35 text
@sendilkumarn
Hello World
…
Slide 36
Slide 36 text
@sendilkumarn
How websites work?
Browser
Redirect
GET /
Server
Cache DNS TCP TLS
Resp
Process
Load
HTML
Slide 37
Slide 37 text
@sendilkumarn
How websites work?
Browser
Redirect
GET /
Server
Cache DNS TCP TLS
Resp
Process
Load
HTML JS
Slide 38
Slide 38 text
@sendilkumarn
How websites work?
Browser
Redirect
GET /
Server
Cache DNS TCP TLS
Resp
Process
Load
HTML JS CSS
Slide 39
Slide 39 text
@sendilkumarn
How websites work?
Browser
Redirect
GET /
Server
Cache DNS TCP TLS
Resp
Process
Load
HTML JS CSS Img
Slide 40
Slide 40 text
@sendilkumarn
Critical Resources
How websites work?
Browser
Redirect
GET /
Server
Cache DNS TCP TLS
Resp
Process
Load
HTML JS CSS Img
Slide 41
Slide 41 text
@sendilkumarn
So why TTFB
matters?
Slide 42
Slide 42 text
@sendilkumarn
71
average requests per page
source
Slide 43
Slide 43 text
@sendilkumarn
Hosting
Slide 44
Slide 44 text
@sendilkumarn
• Tune your backend + optimise
based on your hosting provider
• Real world TTFB latencies
https://ismyhostfastyet.com/
• Godaddy / Shopify / GitHub
• Response header: X-Powered-
By: XXXXXX
Hosting
Slide 45
Slide 45 text
@sendilkumarn
Content Delivery Network
Slide 46
Slide 46 text
@sendilkumarn
Content Delivery Network
• CDNs are your friend
• They increase your capability
• Modern technologies /
compression
• Cloud
fl
are / GCP / AWS
Slide 47
Slide 47 text
@sendilkumarn
Reduce the load in critical path. Improve TTFB
Slide 48
Slide 48 text
@sendilkumarn
Reduce the load in critical path. Improve TTFB
Slide 49
Slide 49 text
@sendilkumarn
TTFB
Slide 50
Slide 50 text
@sendilkumarn
Use caching anywhere and everywhere
TTFB
Slide 51
Slide 51 text
@sendilkumarn
Use caching anywhere and everywhere
Avoid multiple page redirects
TTFB
Slide 52
Slide 52 text
@sendilkumarn
Use caching anywhere and everywhere
Avoid multiple page redirects
Use Service Workers
TTFB
@sendilkumarn
blog.js
0229 kb
0954 kb
0032 kb
1215 kb
Calling DB from the client
Slide 203
Slide 203 text
@sendilkumarn
blog.js
0229 kb
0954 kb
0032 kb
1215 kb
Calling DB from the client
Converts on the client
Slide 204
Slide 204 text
@sendilkumarn
blog.server.js
handled on server
SSR HTML
Slide 205
Slide 205 text
@sendilkumarn
Text
Server Components
Slide 206
Slide 206 text
@sendilkumarn
Text
Server Components
Smaller bundle size
Slide 207
Slide 207 text
@sendilkumarn
Text
Server Components
Smaller bundle size
Cross import server & clients
Slide 208
Slide 208 text
@sendilkumarn
Text
Server Components
Smaller bundle size
Cross import server & clients
Less interactivity & no user state events
Slide 209
Slide 209 text
@sendilkumarn
< />
server
client
Slide 210
Slide 210 text
@sendilkumarn
< />
server
client
Properties 🔽 SSR Static Rendering
SSR
(Rehydration)
CSR
(Pre rendering)
CSR
Slide 211
Slide 211 text
@sendilkumarn
< />
server
client
Properties 🔽 SSR Static Rendering
SSR
(Rehydration)
CSR
(Pre rendering)
CSR
TTFB Slow Slow Slow Fast Fast
Slide 212
Slide 212 text
@sendilkumarn
< />
server
client
Properties 🔽 SSR Static Rendering
SSR
(Rehydration)
CSR
(Pre rendering)
CSR
TTFB Slow Slow Slow Fast Fast
Streaming Yes Yes Good Limited No
Slide 213
Slide 213 text
@sendilkumarn
< />
server
client
Properties 🔽 SSR Static Rendering
SSR
(Rehydration)
CSR
(Pre rendering)
CSR
TTFB Slow Slow Slow Fast Fast
Streaming Yes Yes Good Limited No
TTI FCP FCP High High High
Slide 214
Slide 214 text
@sendilkumarn
< />
server
client
Properties 🔽 SSR Static Rendering
SSR
(Rehydration)
CSR
(Pre rendering)
CSR
TTFB Slow Slow Slow Fast Fast
Streaming Yes Yes Good Limited No
TTI FCP FCP High High High
Dynamic to Static Static Static Mixed Dynamic Dynamic
Slide 215
Slide 215 text
@sendilkumarn
< />
server
client
Properties 🔽 SSR Static Rendering
SSR
(Rehydration)
CSR
(Pre rendering)
CSR
TTFB Slow Slow Slow Fast Fast
Streaming Yes Yes Good Limited No
TTI FCP FCP High High High
Dynamic to Static Static Static Mixed Dynamic Dynamic
Scaling Infra Deploy size Infra + JS JS JS
Slide 216
Slide 216 text
@sendilkumarn
< />
server
client
Properties 🔽 SSR Static Rendering
SSR
(Rehydration)
CSR
(Pre rendering)
CSR
TTFB Slow Slow Slow Fast Fast
Streaming Yes Yes Good Limited No
TTI FCP FCP High High High
Dynamic to Static Static Static Mixed Dynamic Dynamic
Scaling Infra Deploy size Infra + JS JS JS
Example
GMAIL /
Hackernews
Docusaurus /
Net
fl
ix
Next.js / Nuxt /
Universal
Vuepress All our apps
Slide 217
Slide 217 text
@sendilkumarn
Images
Slide 218
Slide 218 text
@sendilkumarn
Images
Slide 219
Slide 219 text
@sendilkumarn
Fetchpriority
Slide 220
Slide 220 text
@sendilkumarn
Fetchpriority
High
⚡
Slide 221
Slide 221 text
@sendilkumarn
Fetchpriority
High low
⚡ 🐌
Slide 222
Slide 222 text
@sendilkumarn
Fetchpriority
High low auto
⚡ 🐌 🌍
Slide 223
Slide 223 text
@sendilkumarn
Fetchpriority
High low auto
⚡ 🐌 🌍
Note: it is a relative priority based on the location where you added.
Slide 224
Slide 224 text
@sendilkumarn
Slide 225
Slide 225 text
@sendilkumarn
Slide 226
Slide 226 text
@sendilkumarn
Slide 227
Slide 227 text
@sendilkumarn
Slide 228
Slide 228 text
@sendilkumarn
Slide 229
Slide 229 text
@sendilkumarn
apple.com
~1MB
Slide 230
Slide 230 text
@sendilkumarn
Slide 231
Slide 231 text
@sendilkumarn
Slide 232
Slide 232 text
@sendilkumarn
40-80% savings using
Image CDN
Slide 233
Slide 233 text
@sendilkumarn
Image CDN
Slide 234
Slide 234 text
@sendilkumarn
Image CDN
Transform
Slide 235
Slide 235 text
@sendilkumarn
Image CDN
Transform Optimise
Slide 236
Slide 236 text
@sendilkumarn
Image CDN
Transform Optimise Delivery of Image
Slide 237
Slide 237 text
@sendilkumarn
Image CDN
Transform Optimise Delivery of Image
Compress
Slide 238
Slide 238 text
@sendilkumarn
Image CDN
Transform Optimise Delivery of Image
Compress Encode
Slide 239
Slide 239 text
@sendilkumarn
Image CDN
Transform Optimise Delivery of Image
Compress Encode Modern content
Slide 240
Slide 240 text
@sendilkumarn
Slide 241
Slide 241 text
@sendilkumarn
Slide 242
Slide 242 text
@sendilkumarn
Slide 243
Slide 243 text
@sendilkumarn
Slide 244
Slide 244 text
@sendilkumarn
Text
Images
Slide 245
Slide 245 text
@sendilkumarn
Text
Images
Properly sized & responsive images
Slide 246
Slide 246 text
@sendilkumarn
Text
Images
Properly sized & responsive images
Use image CDNs
Slide 247
Slide 247 text
@sendilkumarn
Text
Images
Properly sized & responsive images
Use image CDNs
Use fetchpriority, if you can
Slide 248
Slide 248 text
@sendilkumarn
Memory leaks
Slide 249
Slide 249 text
@sendilkumarn
Text
Memory Leaks
Slide 250
Slide 250 text
@sendilkumarn
Text
Memory Leaks
setTimeout / addEventListeners
Slide 251
Slide 251 text
@sendilkumarn
Text
Memory Leaks
setTimeout / addEventListeners
Long running functions
Slide 252
Slide 252 text
@sendilkumarn
Text
Memory Leaks
setTimeout / addEventListeners
Long running functions
Things that kill main thread
Slide 253
Slide 253 text
@sendilkumarn
Performance optimisation is not an end goal;
It is a continuing process.
Plan Deploy Test
Design Develop
Slide 254
Slide 254 text
@sendilkumarn
Optimise resource delivery
Slide 255
Slide 255 text
@sendilkumarn
Optimise resource delivery
Load only viewport
Slide 256
Slide 256 text
@sendilkumarn
Optimise resource delivery
Load only viewport
Preload next in view port
Slide 257
Slide 257 text
@sendilkumarn
Optimise resource delivery
Load only viewport
Prioritise FCP content
Preload next in view port
Slide 258
Slide 258 text
@sendilkumarn
Optimise resource delivery
Load only viewport
Loading Screen
Prioritise FCP content
Preload next in view port
Slide 259
Slide 259 text
@sendilkumarn
Optimise resource delivery
Load only viewport
Loading Screen
Improve TTFB
Prioritise FCP content
Preload next in view port
Slide 260
Slide 260 text
@sendilkumarn
Optimise resource delivery
Load only viewport
Loading Screen
Improve TTFB
Prioritise FCP content
BF cache
Preload next in view port
Slide 261
Slide 261 text
@sendilkumarn
Optimise resource delivery
Load only viewport
Loading Screen
Remove unused resources
Improve TTFB
Prioritise FCP content
BF cache
Preload next in view port
Slide 262
Slide 262 text
@sendilkumarn
Optimise resource delivery
Load only viewport
Loading Screen
Remove unused resources
Improve TTFB
Prioritise FCP content
Reduce Critical Path
BF cache
Preload next in view port
@sendilkumarn
Angular
Lazy Loading
OnPush change
Web Workers
trackBy for lists
Immutable Datastructre
Slide 276
Slide 276 text
@sendilkumarn
Angular
Lazy Loading
OnPush change
Web Workers
trackBy for lists
AOT compilation
Immutable Datastructre
Slide 277
Slide 277 text
@sendilkumarn
Angular
Lazy Loading
OnPush change
No Computation on tmpl
Web Workers
trackBy for lists
AOT compilation
Immutable Datastructre
Slide 278
Slide 278 text
@sendilkumarn
Angular
Lazy Loading
OnPush change
No Computation on tmpl
Web Workers
trackBy for lists
Pure Pipes
AOT compilation
Immutable Datastructre
Slide 279
Slide 279 text
@sendilkumarn
WebAssembly
Slide 280
Slide 280 text
@sendilkumarn
Profilers
Slide 281
Slide 281 text
@sendilkumarn
Perception matters
Slide 282
Slide 282 text
@sendilkumarn
TTFB
Slide 283
Slide 283 text
@sendilkumarn
Optimise resources
TTFB
Slide 284
Slide 284 text
@sendilkumarn
Optimise resources
Use vanilla components
TTFB
Slide 285
Slide 285 text
@sendilkumarn
Optimise resources
Use vanilla components
Improve perception
TTFB