otimizações de performance web: desafios do mundo mobile

128
A WEB MOBILE OTIMIZAÇÕES E DESAFIOS DE PERFORMANCE

Upload: caelum

Post on 08-Sep-2014

3.902 views

Category:

Technology


1 download

DESCRIPTION

Palestra de Sérgio Lopes no MobileConf RJ 2014 & QCon SP 2013.

TRANSCRIPT

Page 1: Otimizações de Performance Web: Desafios do Mundo Mobile

A WEB MOBILE !

OTIMIZAÇÕES E DESAFIOS DE PERFORMANCE

Page 2: Otimizações de Performance Web: Desafios do Mundo Mobile

@sergio_caelumsergiolopes.org

Page 3: Otimizações de Performance Web: Desafios do Mundo Mobile

sergiolopes.org

Page 4: Otimizações de Performance Web: Desafios do Mundo Mobile

sergiolopes.org

Page 5: Otimizações de Performance Web: Desafios do Mundo Mobile

74% DOS USUÁRIOS

FALAM QUE ABANDONAM O SITE MOBILE DEPOIS DE 5s DE ESPERA

Page 6: Otimizações de Performance Web: Desafios do Mundo Mobile

85% DOS USUÁRIOS

ESPERAM QUE UM SITE ABRA NO CELULAR TÃO OU MAIS RÁPIDO QUE NO DESKTOP

Page 7: Otimizações de Performance Web: Desafios do Mundo Mobile

OTIMIZAÇÕES WEB 101

Page 8: Otimizações de Performance Web: Desafios do Mundo Mobile

OTIMIZAÇÕES WEB 101CONCATENAR CSS / JS

Page 9: Otimizações de Performance Web: Desafios do Mundo Mobile

OTIMIZAÇÕES WEB 101

MINIFICAR CSS / JS

CONCATENAR CSS / JS

Page 10: Otimizações de Performance Web: Desafios do Mundo Mobile

OTIMIZAÇÕES WEB 101

CACHE / EXPIRES

MINIFICAR CSS / JS

CONCATENAR CSS / JS

Page 11: Otimizações de Performance Web: Desafios do Mundo Mobile

OTIMIZAÇÕES WEB 101

CACHE / EXPIRES

MINIFICAR CSS / JS

SPRITES CONCATENAR CSS / JS

Page 12: Otimizações de Performance Web: Desafios do Mundo Mobile

OTIMIZAÇÕES WEB 101

CACHE / EXPIRES

MINIFICAR CSS / JS

SPRITES CONCATENAR CSS / JS

JS EMBAIXO

Page 13: Otimizações de Performance Web: Desafios do Mundo Mobile

OTIMIZAÇÕES WEB 101

CACHE / EXPIRES

MINIFICAR CSS / JS

SPRITES CONCATENAR CSS / JS

JS EMBAIXO

CSS NO TOPO

Page 14: Otimizações de Performance Web: Desafios do Mundo Mobile

OTIMIZAÇÕES WEB 101

GZIP

CACHE / EXPIRES

MINIFICAR CSS / JS

SPRITES CONCATENAR CSS / JS

JS EMBAIXO

CSS NO TOPO

Page 15: Otimizações de Performance Web: Desafios do Mundo Mobile

OTIMIZAÇÕES WEB 101

GZIP

CACHE / EXPIRES

MINIFICAR CSS / JS

SPRITES CONCATENAR CSS / JS

JS EMBAIXO

CSS NO TOPO

LAZY-LOAD

Page 16: Otimizações de Performance Web: Desafios do Mundo Mobile

OTIMIZAÇÕES WEB 101

GZIP

CACHE / EXPIRES

MINIFICAR CSS / JS

SPRITES CONCATENAR CSS / JS

JS EMBAIXO

CSS NO TOPO

LAZY-LOAD ASSÍNCRONO

Page 17: Otimizações de Performance Web: Desafios do Mundo Mobile

#mobileperf

Page 18: Otimizações de Performance Web: Desafios do Mundo Mobile

GARGALOS MOBILE

Page 19: Otimizações de Performance Web: Desafios do Mundo Mobile

GARGALOS MOBILE

Page 20: Otimizações de Performance Web: Desafios do Mundo Mobile

GARGALOS MOBILE

Page 21: Otimizações de Performance Web: Desafios do Mundo Mobile

GARGALOS MOBILE

Page 22: Otimizações de Performance Web: Desafios do Mundo Mobile

GARGALOS MOBILE

Page 23: Otimizações de Performance Web: Desafios do Mundo Mobile

GARGALOS MOBILE

Page 24: Otimizações de Performance Web: Desafios do Mundo Mobile

REDE

Page 25: Otimizações de Performance Web: Desafios do Mundo Mobile

largura de banda &

latência (RTT)

Page 26: Otimizações de Performance Web: Desafios do Mundo Mobile

NY

SP

Page 27: Otimizações de Performance Web: Desafios do Mundo Mobile

NY

SP

7648km

Page 28: Otimizações de Performance Web: Desafios do Mundo Mobile

NY

SP

7648km

299,792458km/ms

Page 29: Otimizações de Performance Web: Desafios do Mundo Mobile

NY

SP

Page 30: Otimizações de Performance Web: Desafios do Mundo Mobile

NY

SP

Page 31: Otimizações de Performance Web: Desafios do Mundo Mobile

NY

SP

25,5 ms

Page 32: Otimizações de Performance Web: Desafios do Mundo Mobile

NY

SP

Page 33: Otimizações de Performance Web: Desafios do Mundo Mobile

NY

SP

RTT ideal = 51 ms

Page 34: Otimizações de Performance Web: Desafios do Mundo Mobile
Page 35: Otimizações de Performance Web: Desafios do Mundo Mobile

DNS lookup

!

1 RTT

TCP handshake

!

1 RTT

TLS handshake

!

1-2 RTT

HTTP request

!

> 1 RTT

Page 36: Otimizações de Performance Web: Desafios do Mundo Mobile

latência de redes móveis

Page 37: Otimizações de Performance Web: Desafios do Mundo Mobile
Page 38: Otimizações de Performance Web: Desafios do Mundo Mobile
Page 39: Otimizações de Performance Web: Desafios do Mundo Mobile
Page 40: Otimizações de Performance Web: Desafios do Mundo Mobile
Page 41: Otimizações de Performance Web: Desafios do Mundo Mobile
Page 42: Otimizações de Performance Web: Desafios do Mundo Mobile

WI-FI Mac

WI-FI celular

3G quente

3G frio

2G quente

2G frio

SP 12ms 38ms 88ms 212ms 472ms 622ms

NY 139ms 300ms

Page 43: Otimizações de Performance Web: Desafios do Mundo Mobile

0

800

1600

2400

3200

1 Mbps 2 Mbps 3 Mbps 4 Mbps 5 Mbps 6 Mbps 7 Mbps 8 Mpbs 9 Mbps 10 Mbps

TEMPO DE CARREGAMENTO DA PÁGINA vs LARGURA DE BANDA

Page 44: Otimizações de Performance Web: Desafios do Mundo Mobile

0

1000

2000

3000

4000

240ms 220ms 200ms 180ms 160ms 140ms 120ms 100ms 80ms 60ms 40ms 20ms 0ms

TEMPO DE CARREGAMENTO DA PÁGINA vs LATÊNCIA (RTT)

Page 45: Otimizações de Performance Web: Desafios do Mundo Mobile

BATERIA

Page 46: Otimizações de Performance Web: Desafios do Mundo Mobile

WI-FI - 30 ~200 mW 3G - 1000 ~ 3500 mW

Page 47: Otimizações de Performance Web: Desafios do Mundo Mobile

RRC Radio Resource Controller

Page 48: Otimizações de Performance Web: Desafios do Mundo Mobile

zzz

Page 49: Otimizações de Performance Web: Desafios do Mundo Mobile

zzzidle 15 mW

Page 50: Otimizações de Performance Web: Desafios do Mundo Mobile

zzzidle 15 mW

!!!!

Page 51: Otimizações de Performance Web: Desafios do Mundo Mobile

zzzidle 15 mW

connected 1000 ~ 3500 mW

!!!!

Page 52: Otimizações de Performance Web: Desafios do Mundo Mobile

DNS lookup

!

1 RTT

TCP handshake

!

1 RTT

TLS handshake

!

1-2 RTT

HTTP request

!

> 1 RTT

Page 53: Otimizações de Performance Web: Desafios do Mundo Mobile

RRC negociação

!

200 ~ 2500ms

DNS lookup

!

1 RTT

TCP handshake

!

1 RTT

TLS handshake

!

1-2 RTT

HTTP request

!

> 1 RTT

Page 54: Otimizações de Performance Web: Desafios do Mundo Mobile

4G - LTE 3.5G - HSPA+ 3G - UMTS, HSPA 2G - EDGE, GPRS

Page 55: Otimizações de Performance Web: Desafios do Mundo Mobile

4G - 300 Mbit/s 3.5G - 168 Mbit/s 3G - 14 Mbit/s 2G - 384 Kbit/s

Page 56: Otimizações de Performance Web: Desafios do Mundo Mobile

4G - 5 Mbit/s 3.5G - 1.5 Mbit/s 3G - 0.5 Mbit/s

valores máximos em contrato dos planos atuais da Vivo em SP*

Page 57: Otimizações de Performance Web: Desafios do Mundo Mobile

4G - <100ms 3.5G - <100ms 3G - 100 ~ 500 ms 2G - 300 ~ 1000 ms

Page 58: Otimizações de Performance Web: Desafios do Mundo Mobile

OTIMIZAÇÕES

Page 59: Otimizações de Performance Web: Desafios do Mundo Mobile

conteúdo mais próximo

do usuário

Page 60: Otimizações de Performance Web: Desafios do Mundo Mobile

conteúdo mais próximo

do usuário

Page 61: Otimizações de Performance Web: Desafios do Mundo Mobile

CDNscontent delivery network

Page 62: Otimizações de Performance Web: Desafios do Mundo Mobile

CDNscontent delivery network

Page 63: Otimizações de Performance Web: Desafios do Mundo Mobile

DIMINUIR # REQUESTSconcatenar JS e CSS

usar sprites cachear recursos

!(display:none em <img>)

Page 64: Otimizações de Performance Web: Desafios do Mundo Mobile

SEM REDIRECTS

Page 65: Otimizações de Performance Web: Desafios do Mundo Mobile

SEM REDIRECTS

Page 66: Otimizações de Performance Web: Desafios do Mundo Mobile

POLLING É DO MAL

Page 67: Otimizações de Performance Web: Desafios do Mundo Mobile

LAZY-LOAD JÁ ERA

Page 68: Otimizações de Performance Web: Desafios do Mundo Mobile

PRELOAD É O QUE HÁ

Page 69: Otimizações de Performance Web: Desafios do Mundo Mobile

<link rel="prefetch" href="imagem.jpg">

Page 70: Otimizações de Performance Web: Desafios do Mundo Mobile

<link rel="prefetch" href="imagem.jpg">

<link rel="dns-prefetch" href="http://sergiolopes.org">

Page 71: Otimizações de Performance Web: Desafios do Mundo Mobile

<link rel="prefetch" href="imagem.jpg">

<link rel="subresource" href="imagem.jpg">

<link rel="dns-prefetch" href="http://sergiolopes.org">

Page 72: Otimizações de Performance Web: Desafios do Mundo Mobile

<link rel="prefetch" href="imagem.jpg">

<link rel="subresource" href="imagem.jpg">

<link rel="prerender" href="/confirma/">

<link rel="dns-prefetch" href="http://sergiolopes.org">

Page 73: Otimizações de Performance Web: Desafios do Mundo Mobile

por trás do TCP

Page 74: Otimizações de Performance Web: Desafios do Mundo Mobile

browser server

Page 75: Otimizações de Performance Web: Desafios do Mundo Mobile

SYN

browser server

Page 76: Otimizações de Performance Web: Desafios do Mundo Mobile

SYNSYN ACK

browser server

Page 77: Otimizações de Performance Web: Desafios do Mundo Mobile

SYNSYN ACK

ACKGET /

browser server

Page 78: Otimizações de Performance Web: Desafios do Mundo Mobile

SYNSYN ACK

ACKGET /

4x TCP seg.

browser server

processamento

Page 79: Otimizações de Performance Web: Desafios do Mundo Mobile

SYNSYN ACK

ACKGET /

4x TCP seg. ~5.8 KB

browser server

processamento

Page 80: Otimizações de Performance Web: Desafios do Mundo Mobile

SYNSYN ACK

ACKGET /

4x TCP seg.4x ACK

~5.8 KB

browser server

processamento

Page 81: Otimizações de Performance Web: Desafios do Mundo Mobile

SYNSYN ACK

ACKGET /

4x TCP seg.4x ACK

8x ACK8x TCP seg.

~5.8 KB

~11.6 KB

...

browser server

processamento

Page 82: Otimizações de Performance Web: Desafios do Mundo Mobile

SYNSYN ACK

ACKGET /

4x TCP seg.4x ACK

8x ACK8x TCP seg.

~5.8 KB

~11.6 KB

...

browser server

processamento

Page 83: Otimizações de Performance Web: Desafios do Mundo Mobile

Connection: Keep-Alive

Page 84: Otimizações de Performance Web: Desafios do Mundo Mobile

SYNSYN ACK

ACKGET /

4x TCP seg.4x ACK

8x ACK8x TCP seg.

~5.8 KB

~11.6 KB

...

browser server

processamento

parado...

Page 85: Otimizações de Performance Web: Desafios do Mundo Mobile

flush earlyJava: response.flushBuffer();.NET: Response.Flush();PHP: <?php flush(); ?>

Page 86: Otimizações de Performance Web: Desafios do Mundo Mobile

SYNSYN ACK

ACKGET /

4x TCP seg.4x ACK

8x ACK8x TCP seg.

~5.8 KB

~11.6 KB

...

browser server

processamento

Page 87: Otimizações de Performance Web: Desafios do Mundo Mobile

cwnd AW1010-packet TCP congestion window

Page 88: Otimizações de Performance Web: Desafios do Mundo Mobile

http://bit.ly/1pspHaP

Page 89: Otimizações de Performance Web: Desafios do Mundo Mobile

http://bit.ly/1pspHaP

Page 90: Otimizações de Performance Web: Desafios do Mundo Mobile

http://bit.ly/1pspHaP

Page 91: Otimizações de Performance Web: Desafios do Mundo Mobile

http://bit.ly/1pspHaP

Page 92: Otimizações de Performance Web: Desafios do Mundo Mobile

http://bit.ly/1pspHaP

Page 93: Otimizações de Performance Web: Desafios do Mundo Mobile

CRITICAL RENDERING PATH

Page 94: Otimizações de Performance Web: Desafios do Mundo Mobile
Page 95: Otimizações de Performance Web: Desafios do Mundo Mobile

NUNCA ESCREVA JS QUE BLOQUEIE RENDER

Page 96: Otimizações de Performance Web: Desafios do Mundo Mobile

http://slidesha.re/1tuMgcs

Page 97: Otimizações de Performance Web: Desafios do Mundo Mobile

<script src="script.js" async></script>

Page 98: Otimizações de Performance Web: Desafios do Mundo Mobile

CSS TAMBÉM BLOQUEIA RENDERIZAÇÃO

Page 99: Otimizações de Performance Web: Desafios do Mundo Mobile
Page 100: Otimizações de Performance Web: Desafios do Mundo Mobile
Page 101: Otimizações de Performance Web: Desafios do Mundo Mobile

~600px

Page 102: Otimizações de Performance Web: Desafios do Mundo Mobile

~600px

~9000px

Page 103: Otimizações de Performance Web: Desafios do Mundo Mobile

~600px

~9000px

ABOVE THE FOLD (ATF)

Page 104: Otimizações de Performance Web: Desafios do Mundo Mobile

1 RTT ATF RENDER

Page 105: Otimizações de Performance Web: Desafios do Mundo Mobile
Page 106: Otimizações de Performance Web: Desafios do Mundo Mobile

inline do CSS ATF

Page 107: Otimizações de Performance Web: Desafios do Mundo Mobile

inline do CSS ATF

inline do JS ATF

Page 108: Otimizações de Performance Web: Desafios do Mundo Mobile

inline do CSS ATF

inline do JS ATF

flush ATF

Page 109: Otimizações de Performance Web: Desafios do Mundo Mobile

< 14 KB (cwnd aw10)

inline do CSS ATF

inline do JS ATF

flush ATF

Page 110: Otimizações de Performance Web: Desafios do Mundo Mobile

< 14 KB (cwnd aw10)

inline do CSS ATF

inline do JS ATF

flush ATF

resto do CSS e JS tudo async

Page 111: Otimizações de Performance Web: Desafios do Mundo Mobile
Page 112: Otimizações de Performance Web: Desafios do Mundo Mobile

RENDERIZAÇÃO

Page 113: Otimizações de Performance Web: Desafios do Mundo Mobile

EVITE FRAMEWORKS PESADOS & SUBUTILIZADOS

Page 114: Otimizações de Performance Web: Desafios do Mundo Mobile

QUEBRE JS PESADO

setImmediate requestAnimationFrame

Web Workers

Page 115: Otimizações de Performance Web: Desafios do Mundo Mobile

setImmediate(function(){ // pedaço de processo longo});

Page 116: Otimizações de Performance Web: Desafios do Mundo Mobile

requestAnimationFrame(function(){ // quadro de animação});

Page 117: Otimizações de Performance Web: Desafios do Mundo Mobile

animações na GPU com CSS3

Page 118: Otimizações de Performance Web: Desafios do Mundo Mobile

.fadeout { opacity: 0; transition: opacity 2s ease;}

Page 119: Otimizações de Performance Web: Desafios do Mundo Mobile

cuidado com elementos carosbox-shadow / gradient / SVG / data-uri

Page 120: Otimizações de Performance Web: Desafios do Mundo Mobile

TESTES, ANÁLISES

&

TRADEOFFs

Page 121: Otimizações de Performance Web: Desafios do Mundo Mobile
Page 122: Otimizações de Performance Web: Desafios do Mundo Mobile
Page 123: Otimizações de Performance Web: Desafios do Mundo Mobile

RUMReal User Monitoring

Page 124: Otimizações de Performance Web: Desafios do Mundo Mobile
Page 125: Otimizações de Performance Web: Desafios do Mundo Mobile

BÔNUS: INTERFACE PERFORMÁTICA

delay de 300 ms no click interface instantânea & sync em bg

Page 126: Otimizações de Performance Web: Desafios do Mundo Mobile

LATÊNCIA REDES MÓVEIS HTTP CRITICAL PATH RENDERIZAÇÃO TESTES TRADEOFFS

Page 127: Otimizações de Performance Web: Desafios do Mundo Mobile

A WEB MOBILE !

OTIMIZAÇÕES E DESAFIOS DE PERFORMANCE

Page 128: Otimizações de Performance Web: Desafios do Mundo Mobile

OBRIGADO!

sergiolopes.org @sergio_caelum