SlideShare una empresa de Scribd logo
1 de 79
Descargar para leer sin conexión
1 milhão de usuários simultâneos?
Fernando ike
BIO
1.000.000
1.000.000
● Tamanho médio de uma página 3 Mbytes
● São 586 Mbits/s
● 8.000.000 usuários/mês
● 131 petabytes/mês
1996
State of the Union: Ecommerce
Page Speed & Web Performance
Ilusão da felicidade web
State of the Union: Ecommerce
Page Speed & Web Performance
Walmart
● Cada 1 segundo de melhoria => aumentou
conversão de vendas em 2%
• 100 ms de melhoria => aumentou a receita em
1%
Amazon
● Cada 1 segundo de piora no desempenho (para
o usuário) representa $ 1.600.000.000/ano
1996
1996
● Netscape 2.0
1996
1996
1996
1996
● HTML 3.0
● Internet Explorer 3.0
● Netscape 2.02
● Usuários no Mundo: 36 milhões
● +- 100 mil sites
● CPU 200Mhz, RAM 8MB e HD 850 MB
1996
UOL:
● Página Inicial: 140KB
● Elementos: 26 objetos
NYTIMES:
● Página Inicial: 144KB
● Elementos: 18 objetos
2002
2002
2002
2002
2002
2002
● HTML 4.0
● Internet Explorer 6.0 (2001)
● Mozilla 1.0 / Phoenix 0.1
● Usuários no Mundo: 569 milhões
● +- 220 milhões de sites
● CPU 3Ghz, RAM 256MB e HD 60 GB
2002
UOL:
● Página Inicial: 210Kb
● Elementos: 75 objetos
NYTIMES:
● Página Inicial: 200Kb
● Elementos: 110 objetos
2012
2012
2012
2012
2012
● HTML 5.0
● Internet Explorer 10
● Firefox 15+
● Chrome 22
● Usuários no Mundo: 2,2 bilhões
● +- 9,66 bilhões de sites
● CPU 8-Core, RAM 8GB e HD 1TB
2012
UOL:
● Página Inicial: 1,5 MB
● Elementos: 187 objetos
NYTIMES:
● Página Inicial: 2,03MB
● Elementos: 191 objetos
2014
2014
2014
2014
2014
● HTML 5.0
● Internet Explorer 11
● Firefox 31+
● Chrome 36+
● Usuários no Mundo: 2,4 bilhões
● +- 9,66 bilhões de sites
● CPU 8-Core, RAM 8GB e HD 1TB
Crescimento / Home
UX e desempenho
Fonte: web performance today
Keep-alive
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: close
Content-Encoding: gzip
Content-Length: 17647
Content-Type: text/html
Date: Sat, 09 Aug 2014 12:40:40 GMT
ETag: "20107-10121-5000cd7484ac0"
Last-Modified: Thu, 07 Aug 2014 16:47:15 GMT
Server: Apache/2.2.22
Vary: Accept-Encoding
DNS
● Resolver um DNS para IP leva +- 120 ms à
500 ms (ou mais...)
● Navegadores tem cache DNS além do
Sistema Operacional
● Evite usar redirecionamentos HTTP
DNS
● Navegadores suportam até 6 conexões
simultâneas por domínio
● Navegadores suportam até 32 conexões
simultâneas
● Separe o tráfego SSL em outro(s) domínio(s)
DNS
● www.oioioi.com.br
● login.oioioi.com.br
● estatico1.oioioi.com.br
● estatico2.oioioi.com.br
● estatico3.oioioi.com.br
● estatico4.oioioi.com.br
● estatico5.oioioi.com.br
Domínio com SSL
Domínio com SSL
● Acresce 200ms à 1s a toda conexão
● Aumento do volume total de tráfego
● Aumento do processamento de CPU
Domínio com SSL
● Aumento do uso de memória
● Aumento da complexidade de arquitetura
● Aumento do tempo total de rede
Domínio com SSL
● Use somente onde precise de tráfico seguro
● Áreas que precisem de tráfego autenticado
● Nunca use SSL no servidor(es) de aplicação
● Objetos estáticos preferencialmente
segregados em domínio(s) sem SSL
Se tem muita $$$,
desconsideres todas
anteriores
Compactação (gzip)
● Reduz o tamanho das respostas até 70%
● Os navegadores sinalizam o suporte à compressão
com um cabeçalho HTTP:
Accept-Encoding: gzip, deflate
● Os servidores web notificam o navegador cabeçalho
HTTP:
Content-Encoding: gzip
● Funciona bem para arquivos base texto (html, csv,
JSON, XML, etc)
Não use em arquivos PDF, imagens,
videos, etc.
Não faça compactação no servidor
de aplicação
Time to First Byte
● Boa métrica para identificar lentidão
● TTFB alto pode ser qualquer coisa: Rede, I/O,
Memória, Servidor Web, Aplicação, Banco de
dados, plugins, conteúdo de terceiros, etc...
Requisições HTTP
● Diminuir a quantidade de requisições
HTTP:
– Consolide arquivos CSS
– Consolide arquivos de script (javascript)
– Use CSS Sprite para imagens de fundo
– http://www.oioioi.com.br/1.gif e
http://oioioi.com.br/1.gif são coisas diferentes
● Cuidado com as respostas HTTP 404s
CSS e Javascript
● Remova (Minify) conteúdo considerado
desnecessário:
– Caractater vazio
– Comentários de código
● Coloque o javascript no fim e CSS no início
da páginas html.
● Cuidado com funções duplicadas
● Consolide js e CSS
Javascript
● Use defer
● Cuidado com js de 3rd party
● Quando possível, carregue javascript
dinamicamente
● Carregue-os assincronamente
Cache-Control:
● max-age=3600 - tempo em segundos de
expiração
● public: os objetos em cache podem ser salvos
em caches intermediários e que qualquer
usuário pode consulta
HTTP/1.1 200 OK
Date: Fri, 30 Oct 1998 13:19:41 GMT
Server: Apache/1.3.3 (Unix)
Cache-Control: max-age=3600, must-
revalidate
Expires: Fri, 30 Oct 1998 14:19:41 GMT
Last-Modified: Mon, 29 Jun 1998 02:28:12 GMT
ETag: "3e86-410-3596fbbc"
Content-Length: 1040
Content-Type: text/html
Cache
● Conteúdo estático com longo tempo de cache
● Use múltiplos domínios para cache
● Tenha áreas comuns para manter os objetos
de uso comuns
● Mude o nome do arquivo para expirar o cache
(...com.br/1.gif?v=123)
● Use o content-length no cabeçalho de
resposta
● Use cache nas páginas mais acessadas
Prebrowsing
<link rel="dns-prefetch" href="//fernandoike.com">
<link rel="prefetch" href="http://fernandoike.com/utils.js>
Progressive Images
Fonte: http://sixrevisions.com/graphics-design/jpeg-101-a-crash-course-guide-on-jpeg/
Otimize o uso de imagens
● gif
● jpeg
● png
● webp
● ...
CDN
Content Delivery Network
● Maior parte do tráfego dos usuários são de
download
● CDN estão em diversas regiões
● 80% de um site é de objetos estático
● Conteúdo “mais próximo” do internauta
● Redução de custo direto na operação (rede,
servidores, pessoal, etc.)
Arquitetura
● Servidor de aplicação não é servidor de
objetos estático!
● Cache, Cache, Cache...
● Pense sempre na experiência do usuário
(receber mais rápido)
● Não tenha pudor, irá reescrever várias partes
de código
● Use o que tiver de melhor de cada tecnologia
● Comunicação assíncrona
Referências
● http://calendar.perfplanet.com/
● http://blog.patrickmeenan.com/
● http://www.stevesouders.com/blog/
● http://www.webperformancetoday.com/
● http://httparchive.org/
● http://www.webpagetest.org/
Fernando Ike
● fernando.ike at gmail.com
● http://www.fernandoike.com
● http://twitter.com/fernandoike
● http://linkedin.com/in/fernandoi
ke

Más contenido relacionado

La actualidad más candente

Drupal Camp campinas 2016 - Funcionamento básico das camadas de cache
Drupal Camp campinas 2016 - Funcionamento básico das camadas de cacheDrupal Camp campinas 2016 - Funcionamento básico das camadas de cache
Drupal Camp campinas 2016 - Funcionamento básico das camadas de cacheLeonardo Torati
 
Ruby no tucupi e Rails com farinha
Ruby no tucupi e Rails com farinhaRuby no tucupi e Rails com farinha
Ruby no tucupi e Rails com farinhas4nx
 
S3 - Simple storage service
S3 - Simple storage serviceS3 - Simple storage service
S3 - Simple storage serviceRicardoKutscher
 
STC NG5 DR2 José Manuel
STC NG5 DR2 José ManuelSTC NG5 DR2 José Manuel
STC NG5 DR2 José ManuelAlberto Casaca
 
Economizando Recursos com terminais Burros em Software Livre - Luiz Eduardo G...
Economizando Recursos com terminais Burros em Software Livre - Luiz Eduardo G...Economizando Recursos com terminais Burros em Software Livre - Luiz Eduardo G...
Economizando Recursos com terminais Burros em Software Livre - Luiz Eduardo G...Tchelinux
 
Barman PGBR2017
Barman PGBR2017Barman PGBR2017
Barman PGBR2017wind39
 
A Arte do Deployment - WebDevCamp
A Arte do Deployment - WebDevCampA Arte do Deployment - WebDevCamp
A Arte do Deployment - WebDevCampGeorge Guimarães
 
Implementação de Servidor Linux Ubuntu Server
Implementação de Servidor Linux Ubuntu ServerImplementação de Servidor Linux Ubuntu Server
Implementação de Servidor Linux Ubuntu ServerTiago Bezerra Dos Santos
 
Aula PIT 3 - Ambientes
Aula PIT 3 - AmbientesAula PIT 3 - Ambientes
Aula PIT 3 - AmbientesDirceu Belém
 
Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)elliando dias
 

La actualidad más candente (19)

NoSQL + Node.js
NoSQL + Node.jsNoSQL + Node.js
NoSQL + Node.js
 
Drupal Camp campinas 2016 - Funcionamento básico das camadas de cache
Drupal Camp campinas 2016 - Funcionamento básico das camadas de cacheDrupal Camp campinas 2016 - Funcionamento básico das camadas de cache
Drupal Camp campinas 2016 - Funcionamento básico das camadas de cache
 
Aula Windows 1
Aula Windows 1Aula Windows 1
Aula Windows 1
 
Php WatchDog
Php WatchDogPhp WatchDog
Php WatchDog
 
Ruby no tucupi e Rails com farinha
Ruby no tucupi e Rails com farinhaRuby no tucupi e Rails com farinha
Ruby no tucupi e Rails com farinha
 
Servidor Proxy Squid
Servidor Proxy SquidServidor Proxy Squid
Servidor Proxy Squid
 
S3 - Simple storage service
S3 - Simple storage serviceS3 - Simple storage service
S3 - Simple storage service
 
STC NG5 DR2 José Manuel
STC NG5 DR2 José ManuelSTC NG5 DR2 José Manuel
STC NG5 DR2 José Manuel
 
Ti
TiTi
Ti
 
#3 Instalação MongoDB
#3   Instalação MongoDB  #3   Instalação MongoDB
#3 Instalação MongoDB
 
#4 Primeiros comandos no MongoDB
#4   Primeiros comandos no MongoDB#4   Primeiros comandos no MongoDB
#4 Primeiros comandos no MongoDB
 
Economizando Recursos com terminais Burros em Software Livre - Luiz Eduardo G...
Economizando Recursos com terminais Burros em Software Livre - Luiz Eduardo G...Economizando Recursos com terminais Burros em Software Livre - Luiz Eduardo G...
Economizando Recursos com terminais Burros em Software Livre - Luiz Eduardo G...
 
Barman PGBR2017
Barman PGBR2017Barman PGBR2017
Barman PGBR2017
 
A Arte do Deployment - WebDevCamp
A Arte do Deployment - WebDevCampA Arte do Deployment - WebDevCamp
A Arte do Deployment - WebDevCamp
 
Implementação de Servidor Linux Ubuntu Server
Implementação de Servidor Linux Ubuntu ServerImplementação de Servidor Linux Ubuntu Server
Implementação de Servidor Linux Ubuntu Server
 
Aula PIT 3 - Ambientes
Aula PIT 3 - AmbientesAula PIT 3 - Ambientes
Aula PIT 3 - Ambientes
 
Memcached
MemcachedMemcached
Memcached
 
Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)Linux Servidor Proxy(squid)
Linux Servidor Proxy(squid)
 
Seu site voando
Seu site voandoSeu site voando
Seu site voando
 

Destacado

Performance ao extremo para aplicações Web Mobile Apresentaçao por Alexandre ...
Performance ao extremo para aplicações Web Mobile Apresentaçao por Alexandre ...Performance ao extremo para aplicações Web Mobile Apresentaçao por Alexandre ...
Performance ao extremo para aplicações Web Mobile Apresentaçao por Alexandre ...Paulo Fernandes
 
JavaScript para Programadores Java
JavaScript para Programadores JavaJavaScript para Programadores Java
JavaScript para Programadores JavaCarlos A. Iglesias
 
Mantendo uma api com 2000+ devs
Mantendo uma api com 2000+ devsMantendo uma api com 2000+ devs
Mantendo uma api com 2000+ devsPaulo Fernandes
 
Dicas para novos programadores
Dicas para novos programadoresDicas para novos programadores
Dicas para novos programadoresPaulo Fernandes
 
Chrome Dev Tools TDC 2014 - Apresentação feita por José Yoshiriro Ajisaka Ramos
Chrome Dev Tools TDC 2014 - Apresentação feita por José Yoshiriro Ajisaka RamosChrome Dev Tools TDC 2014 - Apresentação feita por José Yoshiriro Ajisaka Ramos
Chrome Dev Tools TDC 2014 - Apresentação feita por José Yoshiriro Ajisaka RamosPaulo Fernandes
 

Destacado (7)

Performance ao extremo para aplicações Web Mobile Apresentaçao por Alexandre ...
Performance ao extremo para aplicações Web Mobile Apresentaçao por Alexandre ...Performance ao extremo para aplicações Web Mobile Apresentaçao por Alexandre ...
Performance ao extremo para aplicações Web Mobile Apresentaçao por Alexandre ...
 
JavaScript para Programadores Java
JavaScript para Programadores JavaJavaScript para Programadores Java
JavaScript para Programadores Java
 
Mantendo uma api com 2000+ devs
Mantendo uma api com 2000+ devsMantendo uma api com 2000+ devs
Mantendo uma api com 2000+ devs
 
Dicas para novos programadores
Dicas para novos programadoresDicas para novos programadores
Dicas para novos programadores
 
Liferay User Group
Liferay User GroupLiferay User Group
Liferay User Group
 
Liferay Portal 6.2
Liferay Portal 6.2Liferay Portal 6.2
Liferay Portal 6.2
 
Chrome Dev Tools TDC 2014 - Apresentação feita por José Yoshiriro Ajisaka Ramos
Chrome Dev Tools TDC 2014 - Apresentação feita por José Yoshiriro Ajisaka RamosChrome Dev Tools TDC 2014 - Apresentação feita por José Yoshiriro Ajisaka Ramos
Chrome Dev Tools TDC 2014 - Apresentação feita por José Yoshiriro Ajisaka Ramos
 

Similar a Um milhao tdc2014sp Apresentação por Fernando Ike

Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneosFernando Ike
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Marcelo Dieder
 
Descobrindo o Nginx - Um servidor web de alta performance
Descobrindo o Nginx - Um servidor web de alta performanceDescobrindo o Nginx - Um servidor web de alta performance
Descobrindo o Nginx - Um servidor web de alta performanceGustavo Ciello
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaHenrique Lima
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressJulian Fernandes
 
Para ontem: carregando sites mais rapidamente
Para ontem: carregando sites mais rapidamentePara ontem: carregando sites mais rapidamente
Para ontem: carregando sites mais rapidamenteThiago Ayub
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScriptCarlos Santos
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
Como definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoComo definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoWeverton Timoteo
 
Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!magnunleno
 
Forefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteForefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteUilson Souza
 
Secot banco de dados no sql de código aberto
Secot   banco de dados no sql de código abertoSecot   banco de dados no sql de código aberto
Secot banco de dados no sql de código abertoSuissa
 
Definindo a quantidade de workers para sua app
Definindo a quantidade de workers para sua appDefinindo a quantidade de workers para sua app
Definindo a quantidade de workers para sua appWeverton Timoteo
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Fabiano Weimar
 
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]Tiago Hillebrandt
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)Carlos Santos
 
Amazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenhoAmazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenhoAmazon Web Services LATAM
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresDouglas V. Pasqua
 
Apresentação GT - Digital Preservation
Apresentação GT - Digital PreservationApresentação GT - Digital Preservation
Apresentação GT - Digital PreservationRoberto Beraldo Chaiben
 

Similar a Um milhao tdc2014sp Apresentação por Fernando Ike (20)

Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneos
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?
 
Descobrindo o Nginx - Um servidor web de alta performance
Descobrindo o Nginx - Um servidor web de alta performanceDescobrindo o Nginx - Um servidor web de alta performance
Descobrindo o Nginx - Um servidor web de alta performance
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinada
 
Melhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPressMelhorando o desempenho do seu WordPress
Melhorando o desempenho do seu WordPress
 
Para ontem: carregando sites mais rapidamente
Para ontem: carregando sites mais rapidamentePara ontem: carregando sites mais rapidamente
Para ontem: carregando sites mais rapidamente
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Como definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoComo definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicação
 
Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!
 
Forefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteForefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamente
 
Secot banco de dados no sql de código aberto
Secot   banco de dados no sql de código abertoSecot   banco de dados no sql de código aberto
Secot banco de dados no sql de código aberto
 
Definindo a quantidade de workers para sua app
Definindo a quantidade de workers para sua appDefinindo a quantidade de workers para sua app
Definindo a quantidade de workers para sua app
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)
 
Wordpress
WordpressWordpress
Wordpress
 
Amazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenhoAmazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenho
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedores
 
Apresentação GT - Digital Preservation
Apresentação GT - Digital PreservationApresentação GT - Digital Preservation
Apresentação GT - Digital Preservation
 

Um milhao tdc2014sp Apresentação por Fernando Ike

  • 1. 1 milhão de usuários simultâneos? Fernando ike
  • 2. BIO
  • 4. 1.000.000 ● Tamanho médio de uma página 3 Mbytes ● São 586 Mbits/s ● 8.000.000 usuários/mês ● 131 petabytes/mês
  • 5.
  • 7. State of the Union: Ecommerce Page Speed & Web Performance
  • 9. State of the Union: Ecommerce Page Speed & Web Performance
  • 10. Walmart ● Cada 1 segundo de melhoria => aumentou conversão de vendas em 2% • 100 ms de melhoria => aumentou a receita em 1%
  • 11. Amazon ● Cada 1 segundo de piora no desempenho (para o usuário) representa $ 1.600.000.000/ano
  • 12. 1996
  • 13.
  • 15. 1996
  • 16.
  • 17. 1996
  • 18. 1996
  • 19. 1996 ● HTML 3.0 ● Internet Explorer 3.0 ● Netscape 2.02 ● Usuários no Mundo: 36 milhões ● +- 100 mil sites ● CPU 200Mhz, RAM 8MB e HD 850 MB
  • 20. 1996 UOL: ● Página Inicial: 140KB ● Elementos: 26 objetos NYTIMES: ● Página Inicial: 144KB ● Elementos: 18 objetos
  • 21. 2002
  • 22.
  • 23. 2002
  • 24. 2002
  • 25. 2002
  • 26. 2002
  • 27. 2002 ● HTML 4.0 ● Internet Explorer 6.0 (2001) ● Mozilla 1.0 / Phoenix 0.1 ● Usuários no Mundo: 569 milhões ● +- 220 milhões de sites ● CPU 3Ghz, RAM 256MB e HD 60 GB
  • 28. 2002 UOL: ● Página Inicial: 210Kb ● Elementos: 75 objetos NYTIMES: ● Página Inicial: 200Kb ● Elementos: 110 objetos
  • 29. 2012
  • 30.
  • 31. 2012
  • 32. 2012
  • 33. 2012
  • 34. 2012 ● HTML 5.0 ● Internet Explorer 10 ● Firefox 15+ ● Chrome 22 ● Usuários no Mundo: 2,2 bilhões ● +- 9,66 bilhões de sites ● CPU 8-Core, RAM 8GB e HD 1TB
  • 35. 2012 UOL: ● Página Inicial: 1,5 MB ● Elementos: 187 objetos NYTIMES: ● Página Inicial: 2,03MB ● Elementos: 191 objetos
  • 36. 2014
  • 37.
  • 38. 2014
  • 39. 2014
  • 40. 2014
  • 41. 2014 ● HTML 5.0 ● Internet Explorer 11 ● Firefox 31+ ● Chrome 36+ ● Usuários no Mundo: 2,4 bilhões ● +- 9,66 bilhões de sites ● CPU 8-Core, RAM 8GB e HD 1TB
  • 43.
  • 44. UX e desempenho Fonte: web performance today
  • 45. Keep-alive HTTP/1.1 200 OK Accept-Ranges: bytes Connection: close Content-Encoding: gzip Content-Length: 17647 Content-Type: text/html Date: Sat, 09 Aug 2014 12:40:40 GMT ETag: "20107-10121-5000cd7484ac0" Last-Modified: Thu, 07 Aug 2014 16:47:15 GMT Server: Apache/2.2.22 Vary: Accept-Encoding
  • 46. DNS ● Resolver um DNS para IP leva +- 120 ms à 500 ms (ou mais...) ● Navegadores tem cache DNS além do Sistema Operacional ● Evite usar redirecionamentos HTTP
  • 47. DNS ● Navegadores suportam até 6 conexões simultâneas por domínio ● Navegadores suportam até 32 conexões simultâneas ● Separe o tráfego SSL em outro(s) domínio(s)
  • 48. DNS ● www.oioioi.com.br ● login.oioioi.com.br ● estatico1.oioioi.com.br ● estatico2.oioioi.com.br ● estatico3.oioioi.com.br ● estatico4.oioioi.com.br ● estatico5.oioioi.com.br
  • 50. Domínio com SSL ● Acresce 200ms à 1s a toda conexão ● Aumento do volume total de tráfego ● Aumento do processamento de CPU
  • 51. Domínio com SSL ● Aumento do uso de memória ● Aumento da complexidade de arquitetura ● Aumento do tempo total de rede
  • 52. Domínio com SSL ● Use somente onde precise de tráfico seguro ● Áreas que precisem de tráfego autenticado ● Nunca use SSL no servidor(es) de aplicação ● Objetos estáticos preferencialmente segregados em domínio(s) sem SSL
  • 53. Se tem muita $$$, desconsideres todas anteriores
  • 54. Compactação (gzip) ● Reduz o tamanho das respostas até 70% ● Os navegadores sinalizam o suporte à compressão com um cabeçalho HTTP: Accept-Encoding: gzip, deflate ● Os servidores web notificam o navegador cabeçalho HTTP: Content-Encoding: gzip ● Funciona bem para arquivos base texto (html, csv, JSON, XML, etc)
  • 55. Não use em arquivos PDF, imagens, videos, etc. Não faça compactação no servidor de aplicação
  • 56.
  • 57. Time to First Byte ● Boa métrica para identificar lentidão ● TTFB alto pode ser qualquer coisa: Rede, I/O, Memória, Servidor Web, Aplicação, Banco de dados, plugins, conteúdo de terceiros, etc...
  • 58. Requisições HTTP ● Diminuir a quantidade de requisições HTTP: – Consolide arquivos CSS – Consolide arquivos de script (javascript) – Use CSS Sprite para imagens de fundo – http://www.oioioi.com.br/1.gif e http://oioioi.com.br/1.gif são coisas diferentes ● Cuidado com as respostas HTTP 404s
  • 59. CSS e Javascript ● Remova (Minify) conteúdo considerado desnecessário: – Caractater vazio – Comentários de código ● Coloque o javascript no fim e CSS no início da páginas html. ● Cuidado com funções duplicadas ● Consolide js e CSS
  • 60. Javascript ● Use defer ● Cuidado com js de 3rd party ● Quando possível, carregue javascript dinamicamente ● Carregue-os assincronamente
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66. Cache-Control: ● max-age=3600 - tempo em segundos de expiração ● public: os objetos em cache podem ser salvos em caches intermediários e que qualquer usuário pode consulta
  • 67. HTTP/1.1 200 OK Date: Fri, 30 Oct 1998 13:19:41 GMT Server: Apache/1.3.3 (Unix) Cache-Control: max-age=3600, must- revalidate Expires: Fri, 30 Oct 1998 14:19:41 GMT Last-Modified: Mon, 29 Jun 1998 02:28:12 GMT ETag: "3e86-410-3596fbbc" Content-Length: 1040 Content-Type: text/html
  • 68. Cache ● Conteúdo estático com longo tempo de cache ● Use múltiplos domínios para cache ● Tenha áreas comuns para manter os objetos de uso comuns ● Mude o nome do arquivo para expirar o cache (...com.br/1.gif?v=123) ● Use o content-length no cabeçalho de resposta ● Use cache nas páginas mais acessadas
  • 69. Prebrowsing <link rel="dns-prefetch" href="//fernandoike.com"> <link rel="prefetch" href="http://fernandoike.com/utils.js>
  • 71. Otimize o uso de imagens ● gif ● jpeg ● png ● webp ● ...
  • 72. CDN
  • 73. Content Delivery Network ● Maior parte do tráfego dos usuários são de download ● CDN estão em diversas regiões ● 80% de um site é de objetos estático ● Conteúdo “mais próximo” do internauta ● Redução de custo direto na operação (rede, servidores, pessoal, etc.)
  • 74.
  • 75. Arquitetura ● Servidor de aplicação não é servidor de objetos estático! ● Cache, Cache, Cache... ● Pense sempre na experiência do usuário (receber mais rápido) ● Não tenha pudor, irá reescrever várias partes de código ● Use o que tiver de melhor de cada tecnologia ● Comunicação assíncrona
  • 76.
  • 77.
  • 78. Referências ● http://calendar.perfplanet.com/ ● http://blog.patrickmeenan.com/ ● http://www.stevesouders.com/blog/ ● http://www.webperformancetoday.com/ ● http://httparchive.org/ ● http://www.webpagetest.org/
  • 79. Fernando Ike ● fernando.ike at gmail.com ● http://www.fernandoike.com ● http://twitter.com/fernandoike ● http://linkedin.com/in/fernandoi ke