Como instalar e usar o PHP SPX, uma ferramenta de profiller muito útil para debugar códigos PHP.
Esses dias eu estava precisando verificar uma lentidão em um endpoint de uma API da nossa plataforma. Para essa tarefa eu tinha 2 alternativas, ou adicionaria em diversas classes breakpoints de forma que conseguisse obter os milissegundos de cada função ou partiria para uma ferramenta que conseguisse abstrair esse processo braçal e me retornasse informações que fossem fácil de analisar. | |||||
Pensando em algo que facilitasse minha vida eu fui para a segunda alternativa, já que isso me possibilitaria aproveitar essa solução em outro momento futuro. Então minha primeira alternativa foi recorrer a ferramenta que referencia profiler no PHP, o Blackfire. O Blackfire na minha opinião é uma ferramenta fantástica, com ela consigo além de fazer o tracking das classes e métodos chamados, ele também mostra o consumo de CPU, memória, IO e tempo das queries escutada (essa feature é incrível). | |||||
No entanto, o plano anual deles desanima um pouco, já que no meu cenário eu não uso com tanta frequência e eu também não estou aqui para criticar estratégia de comerciais de outras empresas. Com isso fui buscar alternativas ao Blackfire e encontrei o projeto PHP SPX. | |||||
E é do PHP SPX que vim comentar hoje, é um projeto que consegue cumprir com o que é proposto, sendo gratuito, tendo uma instalação rápida e de fácil uso. Com isso, rapidamente se posicionou como uma das melhores ferramentas para um desenvolvedor PHP. | |||||
Mas vamos ao que interessa, ver como ele funciona, como instalar e como usar. O PHP SPX usa por baixo dos panos o XHProf. | |||||
Como instalar | |||||
Vou mostrar os comandos usando container Docker, mas esse comando também funciona no Ubuntu. No Windows, deixo aqui o meu ‘boa sorte’. | |||||
O primeiro passo é baixar o projeto, que pode ser qualquer lugar fora do projeto que você queira analisar, então vamos fazer o git clone e posteriormente acesse a pasta php-spx: | |||||
| |||||
No presente momento que eu escrevo esse artigo, a branch master tem suporte para o PHP 8.1. Mas caso você use uma versão menor, é recomendado que você faça checkout com a ultima release: | |||||
| |||||
E instale o PHP SPX com os seguintes comando: | |||||
| |||||
Por eu estar usando um container docker, não uso o sudo, mas pode ser necessário para rodar o make install. | |||||
Com esses comandos já instalamos a extensão, falta agora ativá-la no php.ini, para isso basta adicionar as seguintes e depois reinicie os serviços (apache, nginx ou o container). | |||||
| |||||
Pronto!!! | |||||
Como usar | |||||
O primeiro é acessar o painel de controle, para isso é só acessar o link: http://localhost/?SPX_KEY=dev&SPX_UI_URI=/ | |||||
Sim, eu também achei estranho a UI aparecer só chamando uma querystring, mas acostume-se, isso é legal. Lá você ativará PHP SPX e aí a mágica começa. O painel de controle serve como um manipulador de cookies, onde a cada interação ele irá adicionar ou remover chaves e valores no cookie do navegador. | |||||
| |||||
O próximo passo é criarmos um arquivo de teste, então criativamente criaremos nosso teste.php e nele colocaremos o phpinfo: | |||||
| |||||
Agora é só acessar o http://localhost/teste.php e pronto, temos nosso relatório. Para isso voltamos ao painel de controle do PHP SPX, se já tiver aberto é só atualizar a página, e no final da página temos a lista de requisições. | |||||
| |||||
Fiz um teste usando o framework Laravel para mostrar aplicação maior: | |||||
| |||||
Informações adicionais | |||||
Ao instalar o PHP SPX ele irá criar a extensão spx.so porém não adianta salvar esse arquivo para usar outra máquina/container/instância porque a instalação arquivos do UI do painel de controle fora da extensão, mais precisamente em /usr/local/share/misc/php-spx. | |||||
Como o segredo de analisar e como analisar uma página é em cima das informações presente no cookie da requisição é possível simular as requisições através do Postman ou Insomnia, exemplo: | |||||
| |||||
Conclusão | |||||
É claro que se comparado com uma ferramenta consolidada como o Blackfire o projeto PHP SPX é embrionário. Pois no Blackfire tem além a feature de monitorar as queries executadas do banco de dados na qual já mencionei anteriormente, há features tão boas quanto, como: dar recomendações de melhorias, SDK, integrações com testes, stateless (ideal quando quando temos escalabilidade horizontal). Porém o objeto do PHP SPX é ser um profiler simples e isso ele cumpre muito bem, tanto para instalar quanto para usar e tem um potencial enorme para futuras melhorias. | |||||
Créditos | |||||
https://github.com/NoiseByNorthwest/php-spx - Repositório oficial do PHP SPX |