SlideShare uma empresa Scribd logo
1 de 73
Performance em aplicações PHP:
do browser ao SO
It's me
Ciro Vargas
Desenvolvedor há 7 anos
https://br.linkedin.com/in/cirovargas
Porque não investir em
performance?
“O custo de mão-de-obra é MUITO maior que
simplesmente escalar minha infraestrutura”
A verdade é que o prejuízo causado é
muito maior que as horas de trabalho
do seu profissional
Você está perdendo conversões (CRO) e
relevância nas buscas (SEO)
https://github.com/zenorocha/browser-diet/wiki/Impact-of-performance
Conversion Rate Optimization
1/3 dos usuários de banda larga não gostam de
esperar mais de 4 segundos
Testes de usabilidade têm mostrado que o
usuário está disposto a esperar, em média, no
máximo 8.6 segundos antes de abandonar o site
47% dos visitantes esperam que uma página
carregue em 2 segundos ou menos
40% das pessoas abandonarão um site que
demora mais de 3 segundos para carregar
http://www.sitepoint.com/website-usability-page-speed-birds-feather/
E-Commerce
79% dos compradores que estão INSATISFEITOS com o
desempenho de um site são MENOS propensos a comprar
nele de novo
52% dos compradores online afirmam que o carregamento
rápido das páginas é IMPORTANTE para sua fidelização
1 segundo de atraso (ou 3 segundos de espera) DIMINUI a
satisfação do consumidor em, aproximadamente, 16%
44% dos compradores online contarão aos amigos sobre uma
experiência online ruim
Se um site de e-commerce ganha 100 mil dólares por dia, UM
SEGUNDO de atraso na página pode custar 2.5 MILHÕES de
dólares em perdas de vendas por ano
https://www.nngroup.com/articles/website-response-times/
SEO
A cada ½ segundo adicional no carregamento de um site, ele
PERDE, em média, 0.4% de tráfego nas buscas
A cada 2 segundos de redução na velocidade de um site
usuários fazem 2% MENOS CONSULTAS e clicam com
3.75% menos frequencia e relatam ser menos satisfeitas com
sua experiência global
Um atraso de 200ms resulta em 36% menos buscas após 6
semanas, enquanto um atraso de 400ms resulta em 76%
menos buscas no mesmo tempo
http://www.webperformancetoday.com/2012/11/06/this-is-your-brain-on-a-slow-website-infographics/
SEO
Uma em cada 100 pesquisas têm sérios problemas de tempo
de carregamento que podem afetar drasticamente a posição
de uma página no ranking de buscas
O Google recomenda se preocupar seriamente com a
velocidade de carregamento de um site quando ela é mais
lenta que 95% dos sites
Hoje, o número de usuários mobile ultrapassa o de desktop
em 200 milhões
http://www.svennerberg.com/2008/12/page-load-times-vs-conversion-rates/
Mobile
56% do tráfego em 2016 será por dispositivos mobile
16% dos consumidores têm feito compras por dispositivos
mobile, 27% deles afirmam que não estão satisfeitos, pois a
experiência de compra é muito LENTA
60% dos usuários móveis tiveram um problema ao acessar
um site em 2014. O tempo de carregamento alto era o
PRIMEIRO problema enfrentado por mais de 75% deles
Bing – A cada 2 segundos mais lento, o fluxo de usuários cai em 4.3%.
Google – Um delay de 400 ms causa uma queda no número de buscas
em 0.59%.
Yahoo! – A cada 400 ms de atraso causa redução na quantidade de
acessos de 5 a 9%.
Shopzilla – Diminuindo em 5 segundos o carregamento da página a
taxa de conversão aumentou entre 7 e 12%, dobrou o número de
usuários vindos de ferramentas de busca, e uma queda de 50% no
número de servidores.
Netflix – Com uma única otimização, compressão gzip, resultou em 13 a
25% de ganho de performance e reduziu o tráfego de rede em 50%.
Amazon - descobriu que sua receita total poderia ser AUMENTADA em
1% a cada 100ms de melhoria de velocidade
Mozilla - Quando a homepage do Firefox carregava 2.2 segundos mais
rápido, as conversões aumentavam em 15.4%
Performance <> Escalabilidade
Nem tudo se resume a um 'apt-get install'
Melhorando a performance do seu sistema
em 4 etapas
Etapa 1 - Entenda (e reproduza) o
seu problema
Etapa 2 – Monitore e colete dados
Etapa 2 – Chrome DevTools
Timeline
Profiles
Network
Etapa 2 – Serviços
Etapa 2 – Comandos Linux
top -> htop
vmstat {tempo}
Iostat [ -k ou -m]
free [-s tempo] [-b ou -m] [-t]
Tcpdump
Iozone
netstat
sar [-b] [-n] [-r] [-A]
Etapa 3 – Elimine possibilidades,
limite as causas
Drill/Narrow Down
Procurar as falhas:
Disco, servidor web, banco… ?
Etapa 4 – Uma alteração por vez
Várias correções de uma vez? Qual resolveu o
problema original?
Evite novos problemas
Dicas
Tuning TCP
Tuning de Disco
Tuning de memória
menos virtual, mais física
Escolhendo o servidor web
Escolhendo o servidor web
NGINX
Cascateamento de proxy + cache = 100x melhor
NGINX
Cascateamento de proxy + cache = 100x melhor
Configurando...
vim /etc/nginx/sites-enabled/default
Configurando...
vim /etc/nginx/sites-enabled/default
Configurando...
vim /etc/nginx/nginx.conf
Testando...
# ab -n 3 -c 1 localhost/teste.php
Melhorando...
# ab -n 3 -c 1 localhost/teste.php
proxy_ignore_headers "Expires" "Cache-Control" "Set-Cookie";
PUTZ...
# ab -n 10 -c 10 localhost/teste.php
1 – X requisições simultâneas
2 – X consultas no cache
3 – X atualizações no PHP
4 – Persistências no cache
Resolvendo
1 – X requisições simultâneas
2 – X retornos do cache
3 – X updates do cache
4 – X caches persistidos
When enabled, only one request at a time will be
allowed to populate a new cache element [...]
Other requests of the same cache element will
either wait for a response [...]
proxy_cache_lock on;
Amém
Ab -n 3 -c 1 http://localhost/teste.php
4- 1 atualização do cache
1 – X consultas simultâneas
2 – X retornos do stale
3- X hits no php
Cascateamento
1 – X requisições simultâneas
2 – X retornos do cache
3 – 1 consulta no stale 2
4 – 1 retorno do cache 2
5 – 1 atualização no cache
Backend
Frontend
# ab -c 1 -n 3 http://localhost/teste.php
# ab -c 3 -n 3 http://localhost/teste.php
1
1
X
X
Use todo poder do servidor web
location ~ .(gif|png|jpe?g)$ {
valid_referers none blocked darmkira.com *.darmkira.com;
if ($invalid_referer) {
return 403;
}
}
location /login_check {
valid_referers none blocked darmkira.com *.darkmira.com;
if ($request_method = POST) {
set $true 1
}
if ($invalid_referer) {
set $true 0
}
if ($true){
fastcgi_pass 127.0.0.1:1234;
}
}
Google PageSpeed
Requisição
Backend
Usuário
PageSpeed – 68 filtros para
otimização
PageSpeed + admin + API = sucesso
Google PageSpeed Insights
https://developers.google.com/speed/pagespeed/insights/
MySQL
MySQL Tuner
http://mysqltuner.com/
MySQL – Distribuições e engines
XtraDB
TokuDB
PHP
Use a memória
Resolva os warnings, notices e deprecated
php.ini
error_reporting = E_ERROR
report_memleaks = On
[sgdb].allow_persistent = Off
session.save_path = "tcp://127.0.0.1:6379?
auth=SENHA"
opcache.enable=1
Checando variáveis
● Empty() → +- 47 micro segundos
● is_array() → +- 715 micro segundos em uma
variável não setada (16x)
Estruturas de controle
● '===' → +- 52 micro segundos
● '==' → +- 76 micro segundos (50%)
FOR
● '$size = sizeOf($array); for ($i=0; $i<$size; $i++)' →
+- 52 micro segundos
● 'for ($i=0; $i<sizeOf($x); $i++)' → +- 31779 micro
segundos (611x)
--optimize-autoloader
“Convert PSR-0/4
autoloading to classmap
to get a faster
autoloader.
This is recommended
especially for production,
but can take a bit of time
to run so it is currently
not done by default.”
Referências
Viver de Blog
http://viverdeblog.com/
High Scalability
http://highscalability.com/
PHP Bench
http://phpbench.com/
Como Perder Peso no Browser
https://browserdiet.com/pt/
Obrigado o/
https://br.linkedin.com/in/cirovargas
cirobsb_br@yahoo.com.br

Mais conteúdo relacionado

Semelhante a Performance em aplicações PHP: do browser ao SO

Otimização de Websites para Ganho de Performance & Resiliência
Otimização de Websites para Ganho de Performance & ResiliênciaOtimização de Websites para Ganho de Performance & Resiliência
Otimização de Websites para Ganho de Performance & ResiliênciaSucuri
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisrafaelberlanda
 
Do 502 BadGateway ao record de 200
Do 502 BadGateway ao record de 200Do 502 BadGateway ao record de 200
Do 502 BadGateway ao record de 200Bruno Paiuca
 
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
 
Construindo Aplicações com Zero Load Time
Construindo Aplicações com Zero Load TimeConstruindo Aplicações com Zero Load Time
Construindo Aplicações com Zero Load TimeJoão Moura
 
Do Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugDo Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugSergio Azevedo
 
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensDrupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensPaulino Michelazzo
 
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearchXen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearchBernardo Donadio
 
Edge middleware acelerando o ecommerce.pdf
Edge middleware acelerando o ecommerce.pdfEdge middleware acelerando o ecommerce.pdf
Edge middleware acelerando o ecommerce.pdfMaira Bello
 
Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?
Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?
Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?Edlaine Zamora
 
Otimização de Performance Web
Otimização de Performance WebOtimização de Performance Web
Otimização de Performance WebPaolo Almeida
 
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014Celso Fernandes
 
PHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHPPHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHPFlávio Lisboa
 
Aumente a performance de seu site
Aumente a performance de seu siteAumente a performance de seu site
Aumente a performance de seu siteHenrique Lima
 
ColdFusion - O que há e o que está por vir?
ColdFusion - O que há e o que está por vir?ColdFusion - O que há e o que está por vir?
ColdFusion - O que há e o que está por vir?Felipe Magalhães
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sitesthiagolima
 

Semelhante a Performance em aplicações PHP: do browser ao SO (20)

Otimização de Websites para Ganho de Performance & Resiliência
Otimização de Websites para Ganho de Performance & ResiliênciaOtimização de Websites para Ganho de Performance & Resiliência
Otimização de Websites para Ganho de Performance & Resiliência
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portais
 
Do 502 BadGateway ao record de 200
Do 502 BadGateway ao record de 200Do 502 BadGateway ao record de 200
Do 502 BadGateway ao record de 200
 
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)
 
Construindo Aplicações com Zero Load Time
Construindo Aplicações com Zero Load TimeConstruindo Aplicações com Zero Load Time
Construindo Aplicações com Zero Load Time
 
Do Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugDo Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio Jug
 
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensDrupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
 
DevXperience WPO com .NET CORE
DevXperience WPO com .NET COREDevXperience WPO com .NET CORE
DevXperience WPO com .NET CORE
 
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearchXen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearch
 
Edge middleware acelerando o ecommerce.pdf
Edge middleware acelerando o ecommerce.pdfEdge middleware acelerando o ecommerce.pdf
Edge middleware acelerando o ecommerce.pdf
 
Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?
Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?
Como testar a performance de ap is utilizando uma ferramenta simples e gratuita?
 
Otimização de Performance Web
Otimização de Performance WebOtimização de Performance Web
Otimização de Performance Web
 
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014
 
PHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHPPHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHP
 
temp EWP
temp EWPtemp EWP
temp EWP
 
Rest Teoria E Pratica
Rest Teoria E PraticaRest Teoria E Pratica
Rest Teoria E Pratica
 
Aumente a performance de seu site
Aumente a performance de seu siteAumente a performance de seu site
Aumente a performance de seu site
 
ColdFusion - O que há e o que está por vir?
ColdFusion - O que há e o que está por vir?ColdFusion - O que há e o que está por vir?
ColdFusion - O que há e o que está por vir?
 
Metralhando sua API
 Metralhando sua API Metralhando sua API
Metralhando sua API
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sites
 

Performance em aplicações PHP: do browser ao SO

  • 1. Performance em aplicações PHP: do browser ao SO
  • 2. It's me Ciro Vargas Desenvolvedor há 7 anos https://br.linkedin.com/in/cirovargas
  • 3. Porque não investir em performance? “O custo de mão-de-obra é MUITO maior que simplesmente escalar minha infraestrutura”
  • 4. A verdade é que o prejuízo causado é muito maior que as horas de trabalho do seu profissional
  • 5. Você está perdendo conversões (CRO) e relevância nas buscas (SEO) https://github.com/zenorocha/browser-diet/wiki/Impact-of-performance
  • 6. Conversion Rate Optimization 1/3 dos usuários de banda larga não gostam de esperar mais de 4 segundos Testes de usabilidade têm mostrado que o usuário está disposto a esperar, em média, no máximo 8.6 segundos antes de abandonar o site 47% dos visitantes esperam que uma página carregue em 2 segundos ou menos 40% das pessoas abandonarão um site que demora mais de 3 segundos para carregar http://www.sitepoint.com/website-usability-page-speed-birds-feather/
  • 7. E-Commerce 79% dos compradores que estão INSATISFEITOS com o desempenho de um site são MENOS propensos a comprar nele de novo 52% dos compradores online afirmam que o carregamento rápido das páginas é IMPORTANTE para sua fidelização 1 segundo de atraso (ou 3 segundos de espera) DIMINUI a satisfação do consumidor em, aproximadamente, 16% 44% dos compradores online contarão aos amigos sobre uma experiência online ruim Se um site de e-commerce ganha 100 mil dólares por dia, UM SEGUNDO de atraso na página pode custar 2.5 MILHÕES de dólares em perdas de vendas por ano https://www.nngroup.com/articles/website-response-times/
  • 8. SEO A cada ½ segundo adicional no carregamento de um site, ele PERDE, em média, 0.4% de tráfego nas buscas A cada 2 segundos de redução na velocidade de um site usuários fazem 2% MENOS CONSULTAS e clicam com 3.75% menos frequencia e relatam ser menos satisfeitas com sua experiência global Um atraso de 200ms resulta em 36% menos buscas após 6 semanas, enquanto um atraso de 400ms resulta em 76% menos buscas no mesmo tempo http://www.webperformancetoday.com/2012/11/06/this-is-your-brain-on-a-slow-website-infographics/
  • 9. SEO Uma em cada 100 pesquisas têm sérios problemas de tempo de carregamento que podem afetar drasticamente a posição de uma página no ranking de buscas O Google recomenda se preocupar seriamente com a velocidade de carregamento de um site quando ela é mais lenta que 95% dos sites Hoje, o número de usuários mobile ultrapassa o de desktop em 200 milhões http://www.svennerberg.com/2008/12/page-load-times-vs-conversion-rates/
  • 10. Mobile 56% do tráfego em 2016 será por dispositivos mobile 16% dos consumidores têm feito compras por dispositivos mobile, 27% deles afirmam que não estão satisfeitos, pois a experiência de compra é muito LENTA 60% dos usuários móveis tiveram um problema ao acessar um site em 2014. O tempo de carregamento alto era o PRIMEIRO problema enfrentado por mais de 75% deles
  • 11. Bing – A cada 2 segundos mais lento, o fluxo de usuários cai em 4.3%. Google – Um delay de 400 ms causa uma queda no número de buscas em 0.59%. Yahoo! – A cada 400 ms de atraso causa redução na quantidade de acessos de 5 a 9%. Shopzilla – Diminuindo em 5 segundos o carregamento da página a taxa de conversão aumentou entre 7 e 12%, dobrou o número de usuários vindos de ferramentas de busca, e uma queda de 50% no número de servidores. Netflix – Com uma única otimização, compressão gzip, resultou em 13 a 25% de ganho de performance e reduziu o tráfego de rede em 50%. Amazon - descobriu que sua receita total poderia ser AUMENTADA em 1% a cada 100ms de melhoria de velocidade Mozilla - Quando a homepage do Firefox carregava 2.2 segundos mais rápido, as conversões aumentavam em 15.4%
  • 12. Performance <> Escalabilidade Nem tudo se resume a um 'apt-get install'
  • 13. Melhorando a performance do seu sistema em 4 etapas
  • 14. Etapa 1 - Entenda (e reproduza) o seu problema
  • 15. Etapa 2 – Monitore e colete dados
  • 16. Etapa 2 – Chrome DevTools Timeline Profiles Network
  • 17. Etapa 2 – Serviços
  • 18. Etapa 2 – Comandos Linux top -> htop vmstat {tempo} Iostat [ -k ou -m] free [-s tempo] [-b ou -m] [-t] Tcpdump Iozone netstat sar [-b] [-n] [-r] [-A]
  • 19. Etapa 3 – Elimine possibilidades, limite as causas Drill/Narrow Down Procurar as falhas: Disco, servidor web, banco… ?
  • 20. Etapa 4 – Uma alteração por vez Várias correções de uma vez? Qual resolveu o problema original? Evite novos problemas
  • 21. Dicas
  • 24. Tuning de memória menos virtual, mais física
  • 27.
  • 28. NGINX Cascateamento de proxy + cache = 100x melhor
  • 29. NGINX Cascateamento de proxy + cache = 100x melhor
  • 33. Testando... # ab -n 3 -c 1 localhost/teste.php
  • 34. Melhorando... # ab -n 3 -c 1 localhost/teste.php proxy_ignore_headers "Expires" "Cache-Control" "Set-Cookie";
  • 35. PUTZ... # ab -n 10 -c 10 localhost/teste.php
  • 36.
  • 37. 1 – X requisições simultâneas 2 – X consultas no cache 3 – X atualizações no PHP 4 – Persistências no cache
  • 39.
  • 40. 1 – X requisições simultâneas 2 – X retornos do cache 3 – X updates do cache 4 – X caches persistidos
  • 41. When enabled, only one request at a time will be allowed to populate a new cache element [...] Other requests of the same cache element will either wait for a response [...] proxy_cache_lock on; Amém
  • 42. Ab -n 3 -c 1 http://localhost/teste.php
  • 43. 4- 1 atualização do cache 1 – X consultas simultâneas 2 – X retornos do stale 3- X hits no php
  • 45.
  • 46.
  • 47. 1 – X requisições simultâneas 2 – X retornos do cache 3 – 1 consulta no stale 2 4 – 1 retorno do cache 2 5 – 1 atualização no cache
  • 48. Backend Frontend # ab -c 1 -n 3 http://localhost/teste.php # ab -c 3 -n 3 http://localhost/teste.php 1 1 X X
  • 49.
  • 50. Use todo poder do servidor web location ~ .(gif|png|jpe?g)$ { valid_referers none blocked darmkira.com *.darmkira.com; if ($invalid_referer) { return 403; } } location /login_check { valid_referers none blocked darmkira.com *.darkmira.com; if ($request_method = POST) { set $true 1 } if ($invalid_referer) { set $true 0 } if ($true){ fastcgi_pass 127.0.0.1:1234; } }
  • 53. PageSpeed – 68 filtros para otimização
  • 54. PageSpeed + admin + API = sucesso
  • 56. MySQL
  • 58. MySQL – Distribuições e engines XtraDB TokuDB
  • 59. PHP
  • 61. Resolva os warnings, notices e deprecated
  • 62. php.ini error_reporting = E_ERROR report_memleaks = On [sgdb].allow_persistent = Off session.save_path = "tcp://127.0.0.1:6379? auth=SENHA" opcache.enable=1
  • 63. Checando variáveis ● Empty() → +- 47 micro segundos ● is_array() → +- 715 micro segundos em uma variável não setada (16x)
  • 64. Estruturas de controle ● '===' → +- 52 micro segundos ● '==' → +- 76 micro segundos (50%)
  • 65. FOR ● '$size = sizeOf($array); for ($i=0; $i<$size; $i++)' → +- 52 micro segundos ● 'for ($i=0; $i<sizeOf($x); $i++)' → +- 31779 micro segundos (611x)
  • 66. --optimize-autoloader “Convert PSR-0/4 autoloading to classmap to get a faster autoloader. This is recommended especially for production, but can take a bit of time to run so it is currently not done by default.”
  • 68.
  • 72. Como Perder Peso no Browser https://browserdiet.com/pt/