Como identificar problemas de performance no PHP com Xdebug Artigo

Conheça os cursos gratuitos do WebDevBr! - Inscreva-se!


Este artigo foi publicado a 2 anos, 5 meses, 3 semanas, 6 dias atrás.

Esse é um assunto recorrente entre os devs de todas as linguagens, como saber se a sua aplicação está ou não consumindo mais recursos do que deveria? Posso responder em uma palavra: Profiling.

O que é profiling

Profile é perfil em inglês, quando uma palavra termina em ing, é o ato de fazer aquilo, (desculpem a explicação, inglês não é meu forte), profiling pode ser algo como geração de perfil. Essa geração de perfil é feita por um profiler e existem alguns mais indicados para produção e outros para desenvolvimento, o Xdebug seria mais para desenvolvimento, embora eu use vez ou outra em produção (ligo e desligo - não façam isso em casa), mas estou adiantando o assunto.

Gerar um perfil é ver quais comandos sua aplicação executa, quando, durante quanto tempo e os recursos que precisou pra isso.

Gostou deste artigo?

Receba atualizações semanais com novos artigos do WebDevBr e outras dicas!

Vamos conhecer meu profiler favorito?

Profiling com Xdebug

Antes de começar você precisa ter o Xdebug instalado e configurado, você pode fazer isso seguindo este artigo: Instalando o Xdebug no PHP.

Agora que você já tem o X debug instalado, vamos configurar tudo. Eu estou atualmente utiizando esta configuração (deve ser colocado no seu arquivo php.ini):

xdebug.profiler_enable=0
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir=/home/erik/Documentos/dev/xdebug

Vamos entender! Em primeiro lugar o comando profileroutputdir na terceira linha informa qual o diretório que o Xdebug deve salvar o relatório de profile e os dois comandos de cima dizem quando ele deve ser executado.

Existem duas formas do Xdebug gerar seu log, a primeira é a cada requisição que você fizer e a segunda é quando você pedir, eu prefiro a segunda forma (quando eu solicitar), assim não fico com aquele diretório lotado de logs atoa, então para dizer que o Xdebug não deve analizar meu código cada vez que eu executar um comando PHP eu simplesmente desligo o profiler_enable (0 = desligado, 1 = ligado).

Agora para habilitar o gatilho (para executar quando eu pedir), apenas mudo o valor do profilerenabletrigger para 1, você pode notar que caso escolha gerar um log a cada requisição, o valor que colocar aqui no profilerenabletrigger não importa, o log vai ser sempre gerado.

Mas como eu digo para o Xdebug analizar meu código? Simples, passe XDEBUG_PROFILE como get, post ou um cookie com esse nome, exemplo:

http://localhost:8080/users/view/3/?XDEBUG_PROFILE

Pronto, agora o seu código será analizado e um log salvo no diretório configurado em xdebug.profileroutputdir.

Agora que tal você abrir pra ler? O que, não deu pra ler? O log gerado é no formato Cache Grind e pode ser lido pelos seguintes softwares:

KCacheGrin - Linux
WinCacheGrind - Windows
Webgrind - Navegador

Ainda da pra intalar o KCacheGrind no Mac, mas eu não usei, só vou deixar o link: http://www.tekkie.ro/computer-setup/how-to-install-kcachegrind-qcachegrind-on-mac-osx/

Conclusão

Agora você pode ter métricas reais sobre sua aplicação, bem rapidamente, não esqueça de dar uma olhada na página da documentação oficial pra ficar por dentro das novidades.


Cursos relacionados


* Parcelamento apenas cartão de crédito! Pode haver uma pequena variação no parcelamento em relação a simulações apresentadas!