Perfilado de código TypeScript: encontrando cuellos de botella para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: por qué el perfilado de TypeScript es importante para el rendimiento

\n

Cuando escribes una aplicación en TypeScript, puede funcionar rápido con datos pequeños, pero a medida que el proyecto crece comienzan a aparecer cuellos de botella — secciones de código que ralentizan la ejecución. El perfilado ayuda a encontrar estos puntos problemáticos y entender dónde se gasta más tiempo.

\n

En este artículo analizaremos cómo perfilar código TypeScript usando las herramientas integradas del navegador y Node.js. Aprenderás cómo encontrar funciones lentas, analizar la pila de llamadas y optimizar secciones críticas.

\n

El artículo está dirigido a desarrolladores principiantes que ya conocen los fundamentos de TypeScript y quieren mejorar el rendimiento de sus aplicaciones.

\n\n

Conceptos básicos del perfilado

\n

El perfilado es el proceso de recopilar datos sobre cómo se ejecuta un programa: cuánto tiempo toman las funciones, con qué frecuencia se llaman, qué recursos consumen.

\n

En el contexto de TypeScript, es importante entender varias métricas clave:

\n
    \n
  • Tiempo de ejecución — cuántos milisegundos toma cada función.
  • \n
  • Número de llamadas — con qué frecuencia se llama a una función.
  • \n
  • Memoria — cuánta memoria se asigna y libera.
  • \n
  • Pila de llamadas — la secuencia de llamadas a funciones.
  • \n
\n

Para perfilar código TypeScript se pueden usar tanto herramientas del navegador (Chrome DevTools) como utilidades de Node.js (por ejemplo, --inspect o clinic.js).

\n\n

Herramientas para el perfilado de TypeScript

\n

Chrome DevTools para código del lado del cliente

\n

Si tu aplicación TypeScript funciona en el navegador, la mejor herramienta son las Chrome DevTools integradas. Abre la pestaña Performance y presiona el botón de grabación. Realiza una acción en la página, detén la grabación y obtén una línea de tiempo.

\n

Ejemplo de análisis: ves que la función processData toma 300 ms. Esto es una señal para optimizar.

\n\n

Node.js y el perfilador integrado

\n

Para código TypeScript del lado del servidor (Node.js) usa la bandera --inspect o --prof. Por ejemplo:

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

Luego abre chrome://inspect en el navegador y conéctate al proceso. Obtendrás las mismas capacidades de DevTools, pero para código del servidor.

\n\n

clinic.js — una utilidad simple para Node.js

\n

Instala clinic.js globalmente:

\n
npm install -g clinic
\n

Ejecuta el perfilado:

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

La utilidad mostrará un informe visual con recomendaciones.

\n\n

Encontrando cuellos de botella en la práctica

\n

Ejemplo 1: Ordenamiento lento de un array

\n

Supongamos que tienes una función para ordenar un array grande 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        // Comparación lenta de cadenas\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

Al perfilar, notarás que toLowerCase() se llama en cada comparación, y puede haber O(n log n) de ellas. El cuello de botella es la conversión repetida de cadenas.

\n

Optimización: convierte las cadenas 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