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

Darkmira - Performance em aplicações PHP

  • 1.
    Performance em aplicaçõesPHP: do browser ao SO
  • 2.
    It's me Ciro Vargas Desenvolvedorhá 7 anos https://br.linkedin.com/in/cirovargas
  • 3.
    Porque não investirem 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á perdendoconversões (CRO) e relevância nas buscas (SEO) https://github.com/zenorocha/browser-diet/wiki/Impact-of-performance
  • 6.
    Conversion Rate Optimization 1/3dos 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 compradoresque 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 cada100 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áfegoem 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 – Acada 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 Nemtudo se resume a um 'apt-get install'
  • 13.
    Melhorando a performancedo 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.
  • 22.
  • 23.
  • 24.
    Tuning de memória menosvirtual, mais física
  • 25.
  • 26.
  • 28.
    NGINX Cascateamento de proxy+ cache = 100x melhor
  • 29.
    NGINX Cascateamento de proxy+ cache = 100x melhor
  • 30.
  • 31.
  • 32.
  • 33.
    Testando... # ab -n3 -c 1 localhost/teste.php
  • 34.
    Melhorando... # ab -n3 -c 1 localhost/teste.php proxy_ignore_headers "Expires" "Cache-Control" "Set-Cookie";
  • 35.
    PUTZ... # ab -n10 -c 10 localhost/teste.php
  • 37.
    1 – Xrequisições simultâneas 2 – X consultas no cache 3 – X atualizações no PHP 4 – Persistências no cache
  • 38.
  • 40.
    1 – Xrequisições simultâneas 2 – X retornos do cache 3 – X updates do cache 4 – X caches persistidos
  • 41.
    When enabled, onlyone 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çãodo cache 1 – X consultas simultâneas 2 – X retornos do stale 3- X hits no php
  • 44.
  • 47.
    1 – Xrequisiçõ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 -c1 -n 3 http://localhost/teste.php # ab -c 3 -n 3 http://localhost/teste.php 1 1 X X
  • 50.
    Use todo poderdo 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; } }
  • 51.
  • 52.
  • 53.
    PageSpeed – 68filtros para otimização
  • 54.
    PageSpeed + admin+ API = sucesso
  • 55.
  • 56.
  • 57.
  • 58.
    MySQL – Distribuiçõese engines XtraDB TokuDB
  • 59.
  • 60.
  • 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 toclassmap 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.”
  • 67.
  • 69.
  • 70.
  • 71.
  • 72.
    Como Perder Pesono Browser https://browserdiet.com/pt/
  • 73.