O que é clinic.js?
Clinic.js é um conjunto de ferramentas para monitoramento e criação de perfil de aplicações Node.js escritas em TypeScript. Ele permite que desenvolvedores identifiquem gargalos de desempenho, vazamentos de memória e problemas com o Event Loop. A biblioteca fornece relatórios visuais na forma de flamegraph, bubbleprof e heapprofiler.
Por que o monitoramento TypeScript é necessário?
TypeScript é compilado para JavaScript, mas no nível de execução é o mesmo Node.js. Sem monitoramento, é impossível entender por que a aplicação fica lenta sob carga. Clinic.js ajuda a:
- Detectar funções lentas e operações assíncronas
- Analisar o uso de memória
- Otimizar o Event Loop (por exemplo, ao trabalhar com cálculos pesados)
- Comparar o desempenho antes e depois da refatoração
Instalação
Instale o clinic.js globalmente via npm:
npm install -g clinicPara usar em um projeto TypeScript, instale também os tipos:
npm install --save-dev @types/nodeFunções principais
- clinic doctor — diagnóstico geral da saúde da aplicação (Event Loop, memória, CPU)
- clinic flame — criação de flame graph para análise da pilha de chamadas
- clinic bubbleprof — visualização de operações assíncronas (promises, callbacks)
- clinic heapprofiler — criação de perfil do heap para encontrar vazamentos de memória
Exemplo de uso com TypeScript
Suponha que você tenha uma aplicação Express com TypeScript. Execute-a com clinic doctor:
clinic doctor -- node dist/index.jsApós finalizar a execução (Ctrl+C), um relatório HTML será aberto. Exemplo de código para teste:
import express from 'express';const app = express();
app.get('/heavy', (req, res) => { const arr = []; for (let i = 0; i < 1e6; i++) { arr.push(Math.random()); } res.send('Done');});
app.listen(3000, () => console.log('Server running'));Em seguida, coloque carga nele usando autocannon:
npx autocannon -c 10 -d 10 http://localhost:3000/heavyO relatório mostrará que o loop está bloqueando o Event Loop.
Quando usar
- Quando houver queda de desempenho em produção
- Antes de escalar a aplicação
- Ao refatorar trechos críticos de código
- Para otimizar fluxos assíncronos (por exemplo, ao usar RxJS)
Conclusão
Clinic.js é uma ferramenta indispensável para qualquer desenvolvedor TypeScript que trabalhe com Node.js. Ele substitui o logging manual e ajuda a encontrar rapidamente problemas que não podem ser capturados no depurador.