Este documento discute técnicas para otimizar o desempenho de código PHP, incluindo profiling com xdebug/KCachegrind e xhprof/xhgui, atualizações do PHP, boas práticas de programação e configurações. O objetivo é demonstrar como minimizar custos de desempenho através de análises de recursos consumidos e detalhes de desempenho de aplicações PHP.
1. Otimizando a Execução de Cófigo-Fonte PHP
Otimizando a Execução
de Código-Fonte
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 2/23/14 - 1 / 15
www.galvao.eti.br
2. Otimizando a Execução de Cófigo-Fonte PHP
www.galvao.eti.br
Quem?!
Er Galvão Abbott é o Presidente da ABRAPHP – Associação
Brasileira de Profissionais PHP, Diretor da PHP Conference Brasil,
o principal evento de PHP da América Latina e fundador do
PHPBR, Grupo de Usuários com mais de 1.200 associados.
Trabalha há mais de 19 anos desenvolvendo sistemas e
aplicações com interface web, sendo 14 anos com PHP e 6 anos
com Zend Framework. Trabalhou com diversas empresas de
grande porte, tanto nacionais como internacionais.
Palestra em eventos e ministra cursos em diversas instituições,
bem como in company.
Site: http://www.galvao.eti.br/
Twitter: @galvao
Slides e Documentos: http://slideshare.net/ergalvao
https://speakerdeck.com/galvao
Fork me @ http://github.com/galvao
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 2/23/14 - 2 / 15
3. Otimizando a Execução de Cófigo-Fonte PHP
www.galvao.eti.br
Objetivo
Esta palestra tem por objetivo demonstrar técnicas de programação PHP que minimizam
custos de performance, bem como analisar detalhes relativos a performance de aplicações
desenvolvidas com a linguagem.
Serão apresentados os seguintes tópicos:
→ Detectando o uso de recursos consumidos pela aplicação
→ Profiling
→ xdebug/KCachegrind
→ xhprof/xhgui
→ Configurações do PHP relacionadas a performance
→ Opções de código-fonte: há diferenças relevantes entre formas de código?
→ Conclusões
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 2/23/14 - 3 / 15
4. Otimizando a Execução de Cófigo-Fonte PHP
www.galvao.eti.br
Profiling
→ xdebug/KCachegrind
↑Confiabilidade
↓GUI Nativa (Compatibilidade)
↑Extensa Documentação
↑Intrusão mínima / inexistente
→ xhprof/xhgui
↑Facebook
↑GUI Web
↑Maior controle via PHP
X
↓Dependências (MongoDB)
↓Documentação (Extensão, Way Back)
↓Maior intrusão no código-fonte
↓Documentação Confusa (xhgui)
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 2/23/14 - 4 / 15
5. Otimizando a Execução de Cófigo-Fonte PHP
www.galvao.eti.br
HowTo – xdebug/KCacheGrind
Painéis a esquerda: Flat Profile
Painéis a direita: Quais funções chamaram/foram chamadas pela função
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 2/23/14 - 5 / 15
6. Otimizando a Execução de Cófigo-Fonte PHP
www.galvao.eti.br
HowTo – xdebug/KCacheGrind – Flat Profile
Tempo gasto na função (sem “filhas”)
Quantas vezes a função foi chamada
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 2/23/14 - 6 / 15
7. Otimizando a Execução de Cófigo-Fonte PHP
www.galvao.eti.br
HowTo – xdebug/KCacheGrind – Callee Map
Representação visual do peso das funções/métodos executados.
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 2/23/14 - 7 / 15
8. Otimizando a Execução de Cófigo-Fonte PHP
www.galvao.eti.br
HowTo – xdebug/KCacheGrind – Callee Map
Tempo e quantidade de chamados da função selecionada
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 2/23/14 - 8 / 15
9. Otimizando a Execução de Cófigo-Fonte PHP
www.galvao.eti.br
Dicas - Atualize o PHP!
PHP 5.2 → 5.3*
* Ref.: Documentação – Considerações de Performance – Garbage Collector
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 2/23/14 - 9 / 15
10. Otimizando a Execução de Cófigo-Fonte PHP
www.galvao.eti.br
Dicas - Atualize o PHP!
PHP 5.3 → 5.4*
→ Melhorias em requisições FastCGI
→ Melhorias no Gerenciamento de Memória
→ Melhoria no tempo de inicialização/encerramento
→ Uso de CPU aproximadamente 15% menor
→ Uso de memória aproximadamente 20% menor
→ Latência em requisição → resposta melhorada em aproximadamente 14%
→ Melhoria geral de performance de 10-15%
* Ref.: Rasmus Lerdorf – PHP Frameworks Day 2013
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 2/23/14 - 10 / 15
11. Otimizando a Execução de Cófigo-Fonte PHP
www.galvao.eti.br
Dicas - Atualize o PHP!
PHP 5.4 → 5.5*
→ opcode Cache nativo
→ Pilha de chamada pré-alocada pelo compilador
→ Execução melhorada de chamadas aninhadas
* Ref.: Rasmus Lerdorf – PHP Conference Argentina
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 2/23/14 - 11 / 15
12. Otimizando a Execução de Cófigo-Fonte PHP
www.galvao.eti.br
Dicas – Boas práticas
Boas práticas
Use um Autoloader
Sessões no DB
Output Buffering
Evitar Getters & Setters simples
Evitar cópias de variáveis
Evitar queries SQL dentro de loops
Evitar execuções desnecessárias de funções dentro de loops
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 2/23/14 - 12 / 15
13. Otimizando a Execução de Cófigo-Fonte PHP
www.galvao.eti.br
Dicas - Configurações
Configurações
realpath_cache_size – Afeta operações com arquivos
Se há muitas operações de arquivos, aumente
realpath_cache_ttl – Duração do cache de realpath
Se arquivos raramente mudam, aumente
(< 5.4) register_long_arrays – Se os arrays HTTP_*_VARS devem ser utilizados
Desative
register_argc_argv – Para execução de scripts de terminal
Desative
include_path – Path para inclusão de arquivos
Mantenha o mais curto possível
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 2/23/14 - 13 / 15
14. Otimizando a Execução de Cófigo-Fonte PHP
www.galvao.eti.br
Conclusões
Conclusões
↑ Profiling (xdebug);
↑ Boas Práticas;
↑ Tunning (PHP)
↑ Ferramentas específicas que agregam
(Memcached, Gearman, etc...)
↑/↓ Ferramentas alternativas que substituem
(Hack, HHVM, Phalcon/Zephyr, NginX)
↓ Alterações específicas de código-fonte*
* Sobre opções de código-fonte: http://phpbench.com/
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 2/23/14 - 14 / 15
15. Otimizando a Execução de Cófigo-Fonte PHP
www.galvao.eti.br
Obrigado!
? Dúvidas?
↓ Críticas?
↑ Elogios?!
CC Attribution-ShareAlike 3.0 Unported License by Er Galvão Abbott - 2/23/14 - 15 / 15