Como saber o ponto mais crítico do meu código e como otimizá-lo?
Muitos desenvolvedores devem se perguntar isso, além de se questionarem em relação à performance e sobre os custos de seu código.
Na empresa em que trabalho atualmente, tivemos alguns problemas de performance usando Node.js, que estava consumindo muito processamento. Às vezes, ocorria Memory Leak.
Estes problemas estavam gerando muito custo para a empresa, fazendo com que não só ela, mas também outras empresas perdessem muito dinheiro. E por que isso está fazendo empresas perderem dinheiro?
Para quem não está habituado a servidores da Amazon, por exemplo, lá o custo é pago por processamento - quanto menor for o processamento, menor será o custo. Por conta disso, eu comecei a estudar formas para melhorar meu código e deixá-lo mais performático. Ao fazer algumas pesquisas e ao ler a própria documentação do Node.js, encontrei o debugger. Achei muito interessante o que é possível fazer, até mesmo, usando o Google Chrome.
Para exemplificar, usaremos o inspector como nosso debugger.
Com o auxílio dessa ferramenta conseguiremos achar problemas de performance. Mas, para ganhar performance, primeiramente, precisaremos entender a forma de uso dessa ferramenta.
Como usar?
O modo de uso é bem simples. Caso a sua versão do Node.js não tenha nativamente, você deve instalar o pacote node-inspect. (nativamente a partir da versão 8.x se não falha a memória).
Se já tiver o pacote, execute sua aplicação conforme abaixo:
node --inspect app.js
Agora, basta acessar seu navegador Google Chrome com a URL:
chrome://inspect
Uma página do Chrome irá abrir e haverá um link escrito "inspect". Clique para abrir a Ferramenta de Desenvolvedor do navegador.
Veja na imagem abaixo: Chrome inspect
Após clicar, algumas opções serão exibidas. As que nos importam nesse momento são Profiler e Memory.
Profiler
Profiler
Basta clicar "start" e, antes de fechar o processo (sistema), clique "stop", que irá criar um registro com as informações, como mostra a imagem abaixo: Profiler Estatística
Memory
Memory
Após selecionar a opção que deseja, repita o processo feito no Profiler, que irá gerar as informações bem semelhantes as dele para analisarmos. Memory Estatística
O interessante é que podemos analisar as informações pela Ferramenta de Desenvolvedor do Chrome, tais como o consumo de CPU e a memória. Com isso, é possível enxergar de forma mais clara de qual parte a máquina está consumindo mais recurso.
O bacana é que ele consegue nos indicar em qual arquivo e linha está ocorrendo essa oneração no sistema. Os valores representados são por porcentagem, bytes e milissegundos.
Os indicadores de cada um são os seguintes: - O Profiler usa porcentagem e milissegundos. - O Memory usa porcentagem e bytes.
Um fator bem relevante é que, desta forma, consegue-se melhorar muito a performance do código.
Consumo de Memoria: -50% Consumo de CPU: -70% Consumo de Tráfego: -33%
Espero ter colaborado com o aprendizado de vocês.
Dúvidas ou sugestões podem ser criadas na issue ISSUE. Demais artigos/ tutoriais estão no REPOSITÓRIO.