SPX - Um simples e gratuito profiler para PHP
10
0

SPX - Um simples e gratuito profiler para PHP

Como instalar e usar o PHP SPX, uma ferramenta de profiller muito útil para debugar códigos PHP.

Willian da Rosa
4 min
10
0

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:

git clone https://github.com/NoiseByNorthwest/php-spx.git
cd 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:

git checkout release/latest

E instale o PHP SPX com os seguintes comando:

phpize
./configure
make
make install

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).

;; Debug
spx.http_enabled=1
spx.http_key="dev"
spx.http_ip_whitelist="*"
extension=spx.so

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.

Painel de controle do PHP SPX
Painel de controle do PHP SPX

O próximo passo é criarmos um arquivo de teste, então criativamente criaremos nosso teste.php e nele colocaremos o phpinfo:

<?php
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.

PHP SPX - análise da requisição<br>
PHP SPX - análise da requisição

Fiz um teste usando o framework Laravel para mostrar aplicação maior:

PHP SPX - análise da requisição com o Laravel<br>
PHP SPX - análise da requisição com o Laravel

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:

curl --request GET \
--url http://localhost/ \
--header 'Cookie: SPX_KEY=dev; SPX_ENABLED=1; SPX_AUTO_START=1; SPX_BUILTINS=1; SPX_SAMPLING_PERIOD=0; SPX_DEPTH=0; SPX_METRICS=it'

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