Perfilando código TypeScript: encontrando gargalos para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que a perfilhamento TypeScript é importante para o desempenho

\n

Quando você escreve um aplicativo em TypeScript, ele pode funcionar rapidamente com dados pequenos, mas com o crescimento do projeto começam a aparecer gargalos — trechos de código que retardam a execução. A perfilhamento ajuda a encontrar esses pontos problemáticos e entender onde o tempo está sendo gasto.

\n

Neste artigo, vamos analisar como perfilhar código TypeScript usando ferramentas integradas do navegador e Node.js. Você aprenderá a encontrar funções lentas, analisar a pilha de chamadas e otimizar trechos críticos.

\n

O artigo é voltado para desenvolvedores iniciantes que já conhecem os fundamentos do TypeScript e desejam melhorar o desempenho de seus aplicativos.

\n\n

Conceitos básicos de perfilhamento

\n

Perfilhamento é o processo de coleta de dados sobre como um programa é executado: quanto tempo as funções levam, com que frequência são chamadas, quais recursos são consumidos.

\n

No contexto do TypeScript, é importante entender algumas métricas-chave:

\n
    \n
  • Tempo de execução — quantos milissegundos cada função leva.
  • \n
  • Número de chamadas — com que frequência uma função é chamada.
  • \n
  • Memória — quanta memória é alocada e liberada.
  • \n
  • Pilha de chamadas — a sequência de chamadas de funções.
  • \n
\n

Para perfilhar código TypeScript, você pode usar tanto ferramentas do navegador (Chrome DevTools) quanto utilitários Node.js (por exemplo, --inspect ou clinic.js).

\n\n

Ferramentas para perfilhamento TypeScript

\n

Chrome DevTools para código do lado do cliente

\n

Se seu aplicativo TypeScript funciona no navegador, a melhor ferramenta são os Chrome DevTools integrados. Abra a aba Performance e clique no botão de gravação. Execute uma ação na página, pare a gravação e obtenha a linha do tempo.

\n

Exemplo de análise: você vê que a função processData leva 300 ms. Isso é um sinal para otimização.

\n\n

Node.js e o perfilhador integrado

\n

Para código TypeScript do lado do servidor (Node.js), use a flag --inspect ou --prof. Por exemplo:

\n
node --inspect dist/app.js
\n

Em seguida, abra chrome://inspect no navegador e conecte-se ao processo. Você terá os mesmos recursos do DevTools, mas para código do servidor.

\n\n

clinic.js — utilitário simples para Node.js

\n

Instale o clinic.js globalmente:

\n
npm install -g clinic
\n

Inicie o perfilhamento:

\n
clinic doctor -- node dist/app.js
\n

O utilitário mostrará um relatório visual com recomendações.

\n\n

Encontrando gargalos na prática

\n

Exemplo 1: Ordenação lenta de array

\n

Suponha que você tenha uma função de ordenação de um grande array de objetos:

\n
interface User {\n    id: number;\n    name: string;\n    age: number;\n}\n\nfunction sortUsers(users: User[]): User[] {\n    return users.sort((a, b) => {\n        // Comparação lenta de strings\n        const nameA = a.name.toLowerCase();\n        const nameB = b.name.toLowerCase();\n        if (nameA < nameB) return -1;\n        if (nameA > nameB) return 1;\n        return 0;\n    });\n}
\n

Ao perfilhar, você notará que toLowerCase() é chamado para cada comparação, e pode haver O(n log n) delas. O gargalo é a conversão repetida de strings.

\n

Otimização: converta as strings previamente:

\n
function sortUsersOptimized(users: User[]): User[] {\n    return users\n        .map(user => ({\n            ...user,\n            _lowerName: user.name.toLowerCase()\n        }))\n        .sort((a, b) => {\n            if (a._lowerName < b._lowerName) return -1;\n            if (a._lowerName > b._lowerName) return 1;\n            return 0;\n                

Blogs

Book Recommendations