SlideShare una empresa de Scribd logo
Picture from Simon Howden freedigitalphotos.net!
hacking web
performance
maximiliano firtman
@firt
firt.dev
mobile+web developer
consulting & training
firt.dev/learn
Hacking Web Performance en Español - JSConf México 2020
firt.dev
Tengo dos objetivos hoy…
Que te sientas mal
Enseñarte trucos
😁
¡Empecemos!
Yo se que ya sabes que...
http://www.flickr.com/photos/steenslag/22689920/ - borrowed fromSteve Souders
Picture from Simon Howden freedigitalphotos.net
Picture from Simon Howden freedigitalphotos.net
15
Picture from Simon Howden freedigitalphotos.net
¡Es principalmente responsabilidad
del front end!
Yo se que ya sabes que...
Existen las métricas
centradas en el usuario
Signos Vitales Web
(Core Vitals by Google)
Se calculan sobre el percentil 75
tanto en mobile como desktop
Métricas centradas en el usuario
Largest Contentful Paint
LCP - mide la carga inicial
Métricas centradas en el usuario
First Input Delay
FID - mide la interactividad
Métricas centradas en el usuario
Cumulative Layout Shift
CLS - mide la estabilidad visual
... hay más métricas: Speed Index,
TTFB, FCP, Time to Interactive
"Pero oye, mi web anda rápido"
Objetivos
LCP: 2.5s - 4.0s
FID: 100ms - 300ms
CLS: 0.1 - 0.25
Yo se que ya sabes que
hay que...
Optimizar la transferencia de
recursos
Ya sabes que hay que
Trabajar con TLS y HTTP/2
Ya sabes que hay que
Usar CSS como aperitivo
Ya sabes que hay que
Usar JavaScript como postre
Ya sabes que hay que
Optimizar imágenes
Ya sabes que hay que
Usar Service Workers
Ya sabes que hay que
Ya estás haciendo todo esto, ¿no?
¿Cuál es el problema entonces?
Time to Interactive
El problema
HTTP Archive with Lighthouse
2 3 4
5 6 7 8
9.3
1
9
Si una página tarda más de 3 segundos
El problema
53% abandona
Research by Double Click
El problema
Siembre hemos
subestimado el mundo móvil
iOS y Android
¿Safari y Chrome?
browsers with market share
browsers with market share
Hacking Web Performance en Español - JSConf México 2020
¡Usamos Red Celular!
Vamos Max, ¡tenemos 4G! Ya el
rendimiento no es un problema...
(
)
www.gsma.com/mobileeconomy - Dec 2019
Ancho de Banda
Redes celulares
RTT - latency
Min Max
Redes celulares
Min Max
RTT - latency
Redes celulares
Todavía tenemos muchos
problemas de performance
(
)
Chrome Lite Pages 🆕
Chrome 73 Android
Chrome Lite Pages
•Si el usuario habilita
Data Saver
⭐🆕
Se mostrará una Lite Page si
Chrome Lite Pages
• Estás en una red 2G
O
• First Contentful Paint es mayor a 5s
⭐🆕
Lite Page?
Chrome Lite Pages
• Cloud-based rendering
• Optimizaciones "Smart"
• No se cargan todas las
imágenes
⭐🆕
Progressive Web Apps 🆕
Progressive Web Apps 🆕
Progressive Web Apps 🆕
¡A Hackear Web Performance!
Hackear Carga Inicial
Evitar más de un roundtrip
Carga Inicial
• TCP Slow Start - initial congestion window
(initcwnd)
• Linux: 14.6 KiB
KiB?
🤔
¿Cuántos bytes en un kilobyte?
1 KB = 1024 bytes
1 KB = 1024 bytes
1 KB = 1000 bytes
Hacking Web Performance en Español - JSConf México 2020
Hacking Web Performance en Español - JSConf México 2020
Hacking Web Performance en Español - JSConf México 2020
Hacking Web Performance en Español - JSConf México 2020
1 KiB = 1024 bytes
Evitar más de un rountrip
Carga Inicial
• TCP Slow Start - initial congestion window
(initcwnd)
• Linux: 14.6 KiB
Hacking Web Performance en Español - JSConf México 2020
Above the Fold
(ATF)
Below the Fold
(BTF)
Entregar ATF en 14.6 KiB
Carga Inicial
• Embeber todo el CSS y JS que entre
• Si hay espacio, agregar logo y/o imágenes
en baja resolución
Evitar el redirect de http a httpS
• Usar HSTS (HTTP Strict Transport Security)
• Cabecera
• Opt-in en hstspreload.org
Carga Inicial
Hackear la Transferencia de
Datos
HTTP/3 (sobre QUIC)
Transferencia de Datos
• Protocolo "beta" sobre UDP
• Reduce latencia y congestión de mensajes
• Interfaz HTTP/2 con TLS
•
Usar Brotli
• Puede ahorrar hasta ~25% de transferencia
comparado con GZIP
Transferencia de Datos
Hackear Carga de Recursos
Control de Caché Moderno
Carga de Recursos
• Hash en nombres de archivos es un patrón común
• Navegadores hacen igual un request condicional
• Hola a Cache-Control: immutable
Control de Caché Moderno
Carga de Recursos
Hay un nuevo patrón común
• 1) entregar desde el caché
• 2) actualizarlo en el background para el futuro
Control de Caché Moderno
Carga de Recursos
Cache-Control: stale-while-revalidate=99
Control de Caché Moderno
Carga de Recursos
Calentar motores
• Ayudar al navegador a comenzar cuanto antes
• Consultas DNS: ~150ms
• Conexiones TCP y TLS: ~200ms
Carga de Recursos
Anunciar consultas DNS
<link rel="dns-prefetch" href=“https://newdomain.com">
HTML
Carga de Recursos
Anunciar conexiones TLS
<link rel="preconnect" href=“https://newdomain.com”
crossorigin>
HTML
Carga de Recursos
Anunciando en la cabecera
Link: <https://my-analytics.com>; rel=preconnect;
crossorigin
HTTP
Carga de Recursos
Precarga
Ayudar al navegador a manejar la prioridad de
descarga de recursos
Carga de Recursos
Precarga
<link rel="preload" href=“styles.css” as=“style”>
HTML
Carga de Recursos
Precarga
Link: <https://otherhost.com/font.woff2>; rel=preload;
as=font; crossorigin
HTTP
Carga de Recursos
Priority Hints
<link rel="preload" as="image"
href="hero.jpg" importance="high">
<img src="otherimage.jpg" importance="low">
HTML
🆕
Carga de Recursos
Reevaluar CDNs
• Era muy común descargar recursos de CDNs
• Safari ya no usa el caché en estos casos y
Chrome lo está por seguir
Carga de Recursos
Hackeando Imágenes
http://www.flickr.com/photos/steenslag/22689920/ - borrowed fromSteve Souders
Una imagen vale más que
mil palabras...
… si baja
Carga Demorada (Lazy Load)
<img src="photo.png" alt="Never forget it"
loading="lazy">
HTML
🆕
Imágenes
Source: addyosmani.com
Es ya hora de reemplazar
JPEG y PNG
Imágenes
WebP
https://github.com/imagemin/zopflipng-bin
32%
Imágenes
AVIF
https://github.com/imagemin/zopflipng-bin
40%
Imágenes
Zopfli PNG
https://github.com/imagemin/zopflipng-bin
20%
Imágenes
Guetzli JPEG
https://github.com/google/guetzli
20%
Imágenes
Hackear lo Conocido
¿React?
¿Angular?
¿Vue?
Lo Conocido
Server-Side: Next.js, Nuxt.js
Generadores estáticos: Eleventy
Lo Conocido
Hacking Web Performance en Español - JSConf México 2020
Performance es PRIORIDAD UNO
Hay que empujar siempre más
Vale la pena el esfuerzo
¿Te sientes mal ya?
Foto de freefoto.com
www.firt.dev
@firt
¡GRATIS!

Más contenido relacionado

Hacking Web Performance en Español - JSConf México 2020