Web tuning
Carlos Eduardo L. Lopes @_carloslopes
@carloslopes
Slide 2
Slide 2 text
No content
Slide 3
Slide 3 text
Performance é
importante?
Slide 4
Slide 4 text
Qualquer carregamento de página que
demore mais que 2 segundos é um
desastre
Akamai Set/09
Slide 5
Slide 5 text
47%
esperam que uma página carregue em 2
segundos ou menos
Akamai Set/09
Slide 6
Slide 6 text
40%
abandonam uma página se ela demora
mais que 3 segundos para carregar
Akamai Set/09
Slide 7
Slide 7 text
52%
afirmam que carregamentos rápidos são
importantes para fidelidade com o site
Akamai Set/09
Slide 8
Slide 8 text
14%
começam a comprar em outro site se o
carregamento é lento
Akamai Set/09
Slide 9
Slide 9 text
64%
compradores insatisfeitos comprarão em
outro site em uma próxima vez
Akamai Set/09
Slide 10
Slide 10 text
Além disso…
Slide 11
Slide 11 text
15%
de aumento no tráfego enviado pelo
Google, Bing e Yahoo
LightSpeedNow
Slide 12
Slide 12 text
A prova de que
milissegundos
importam
Slide 13
Slide 13 text
Kohavi and Longbotham 2007
Para cada 100ms acrescentados no
carregamento da Amazon.com as
vendas diminuem 1%
Slide 14
Slide 14 text
bit.ly/WQfyIX
Delay de 1s no lonelyplanet(.com)
resulta na queda de ~20% da taxa de
conversão
Slide 15
Slide 15 text
Yahoo descobriu que uma página 400ms
mais demorada tem de 5-9% mais pessoas
saindo antes do carregamento finalizar
Slide 16
Slide 16 text
Quais os gargalos de
uma aplicação web?
Slide 17
Slide 17 text
Navegador
Aplicação
Database Webservice
I/O
Slide 18
Slide 18 text
Navegador
Aplicação
Database Webservice
I/O
Slide 19
Slide 19 text
Dificilmente o código que executa a
aplicação é o gargalo
Slide 20
Slide 20 text
Como resolver?
Slide 21
Slide 21 text
Minificação
e concatenação
de Assets
Cache
de Assets
Engine
de Busca
Sprites
Cookies
Leves
Background
Jobs
CDN
Uploads
Diretos
Cache de
Operações
Custosas
Remover todos os whitespaces
Remover quebra de linhas
Remover comentários
Slide 27
Slide 27 text
Navegador Servidor
Documento
Javascript
CSS
Slide 28
Slide 28 text
Assets menores e em menor quantidade
Menor número de requests no servidor
Slide 29
Slide 29 text
No content
Slide 30
Slide 30 text
Minificação
e concatenação
de Assets
Cache
de Assets
Engine
de Busca
Sprites
Cookies
Leves
Background
Jobs
CDN
Uploads
Diretos
Cache de
Operações
Custosas
Slide 31
Slide 31 text
Sprites
Front-end
Slide 32
Slide 32 text
No content
Slide 33
Slide 33 text
Navegador Servidor
Documento
Imagens
Slide 34
Slide 34 text
Como resolver?
Slide 35
Slide 35 text
icons.png
Slide 36
Slide 36 text
Navegador Servidor
Documento
Imagens
icons.png
Slide 37
Slide 37 text
Download mais rápido dos ícones
Menor número de requests no servidor
Slide 38
Slide 38 text
No content
Slide 39
Slide 39 text
Minificação
e concatenação
de Assets
Cache
de Assets
Engine
de Busca
Sprites
Cookies
Leves
Background
Jobs
CDN
Uploads
Diretos
Cache de
Operações
Custosas
Menor número de requests no servidor
Requests mais leves para obter assets
Vantagens que o serviço de CDN oferece
Aumenta o número de requests paralelas
Slide 48
Slide 48 text
No content
Slide 49
Slide 49 text
Minificação
e concatenação
de Assets
Cache
de Assets
Engine
de Busca
Sprites
Cookies
Leves
Background
Jobs
CDN
Uploads
Diretos
Cache de
Operações
Custosas
Conteúdo estático requisitado
apenas quando necessário
Menor número de requests no servidor
Carregamento mais rápido da página
Slide 59
Slide 59 text
Minificação
e concatenação
de Assets
Cache
de Assets
Engine
de Busca
Sprites
Cookies
Leves
Background
Jobs
CDN
Uploads
Diretos
Cache de
Operações
Custosas
Slide 60
Slide 60 text
Cookies leves
Front-end
Slide 61
Slide 61 text
#0123 - Playstation 4 - US$399.99
#3242 - Destiny - US$50.00
#6938 - The Last Of Us - US46.60
User #54919
Colorscheme=#1324
Menu=Eletrônicos,Jogos,Apple
Slide 62
Slide 62 text
Para cada 500 bytes no tamanho dos
cookies o carregamento da
página aumenta 15ms
http://yuiblog.com/blog/2007/03/01/performance-research-part-3/
Slide 63
Slide 63 text
Como resolver?
Slide 64
Slide 64 text
Navegador
Servidor app
user id
shopping cart data
configuration data
Slide 65
Slide 65 text
Navegador
Servidor app
Persistência
user id
shopping cart data
configuration data
user id
Slide 66
Slide 66 text
Requests mais leves
Carregamento mais rápido
Slide 67
Slide 67 text
Minificação
e concatenação
de Assets
Cache
de Assets
Engine
de Busca
Sprites
Cookies
Leves
Background
Jobs
CDN
Uploads
Diretos
Cache de
Operações
Custosas
Evita requisições bloqueantes no servidor
Processos do servidor ficam disponíveis
para ações mais importantes
Slide 74
Slide 74 text
No content
Slide 75
Slide 75 text
Minificação
e concatenação
de Assets
Cache
de Assets
Engine
de Busca
Sprites
Cookies
Leves
Background
Jobs
CDN
Uploads
Diretos
Cache de
Operações
Custosas
Slide 76
Slide 76 text
Engine de busca
Back-end
Slide 77
Slide 77 text
1.427.349 produtos
Slide 78
Slide 78 text
SELECT * FROM products WHERE id = ?????
~ 200ms
Slide 79
Slide 79 text
SELECT * FROM products WHERE name LIKE ‘%?%'
~40s
e alguns timeouts
Slide 80
Slide 80 text
Como resolver?
Slide 81
Slide 81 text
Aplicação
Banco de dados
name LIKE ‘%???%'
Produto #23242
Produto #54534
Produto #00434
Slide 82
Slide 82 text
Aplicação
Banco de dados
query match name ???
#23242
#54534
#00434
Engine de busca
id IN (?, ?, ?)
Produto #23242
Produto #54534
Produto #00434
Slide 83
Slide 83 text
query match name ???
~ 190ms
???
Slide 84
Slide 84 text
Otimiza o uso do banco de dados
Resultados das pesquisas mais relevantes
Opcões de pesquisa mais avançadas
Responses mais rápidas
Slide 85
Slide 85 text
No content
Slide 86
Slide 86 text
Minificação
e concatenação
de Assets
Cache
de Assets
Engine
de Busca
Sprites
Cookies
Leves
Background
Jobs
CDN
Uploads
Diretos
Cache de
Operações
Custosas
Navegador
Aplicação
Store2
Store1 Store3
Background Job
POST /checkout
Enfileira job
200ms
SKU #1353
5s SKU #43
6s SKU #5463
4s
GET /order/status
not ready
ready
GET /order/status
not ready
GET /order/status
Slide 92
Slide 92 text
Evita requests bloqueantes
Percepção de maior rapidez para usuário
Responses mais rápidas
Slide 93
Slide 93 text
Hangfire
HornetQ
Slide 94
Slide 94 text
Minificação
e concatenação
de Assets
Cache
de Assets
Engine
de Busca
Sprites
Cookies
Leves
Background
Jobs
CDN
Uploads
Diretos
Cache de
Operações
Custosas
Slide 95
Slide 95 text
Cache de
operações custosas
Back-end
Slide 96
Slide 96 text
User1
Aplicação
Banco de dados
GET /
Produtos mais vendidos
User2
300ms
Slide 97
Slide 97 text
User1
Aplicação
Banco de dados
GET /
Produtos mais vendidos
User2
300ms
Slide 98
Slide 98 text
Operação custosa sendo realizada
múltiplas vezes
Slide 99
Slide 99 text
Como resolver?
Slide 100
Slide 100 text
User1
Aplicação
Banco de dados
User2
Slide 101
Slide 101 text
User1
Aplicação
Banco de dados
User2
Cache store
Slide 102
Slide 102 text
User1
Aplicação
Banco de dados
User2
Cache store
GET /
Produtos mais vendidos
300ms
Tem os produtos mais vendidos?
Não
Guarde por 10min
500ms
Slide 103
Slide 103 text
User1
Aplicação
Banco de dados
User2
Cache store
GET /
Tem os produtos mais vendidos?
Sim
200ms
Slide 104
Slide 104 text
Reaproveita resultado de operações
custosas já realizadas
Respostas mais rápidas
Slide 105
Slide 105 text
No content
Slide 106
Slide 106 text
Minificação
e concatenação
de Assets
Cache
de Assets
Engine
de Busca
Sprites
Cookies
Leves
Background
Jobs
CDN
Uploads
Diretos
Cache de
Operações
Custosas
Slide 107
Slide 107 text
E assim…
Slide 108
Slide 108 text
Minificação
e concatenação
de Assets
Cache
de Assets
Engine
de Busca
Sprites
Cookies
Leves
Background
Jobs
CDN
Uploads
Diretos
Cache de
Operações
Custosas
Slide 109
Slide 109 text
Navegador
Aplicação
Database Webservice
I/O
Slide 110
Slide 110 text
Quando é rápido
o bastante?
Slide 111
Slide 111 text
Doherty Threshold
Slide 112
Slide 112 text
Speed, Performance,
and Human Perception
Ilya Grigorik
http://www.youtube.com/watch?v=7ubJzEi3HuA
Slide 113
Slide 113 text
1ms - 100ms Instantâneo
100ms - 300ms
Delay levemente
perceptível
300ms - 1s
Delay perceptível
Perca de foco
1s+
Alteração de
contexto mental
10s+ Vou voltar mais tarde…
Slide 114
Slide 114 text
Obrigado!
Carlos Eduardo L. Lopes @_carloslopes
@carloslopes