- Inicio
- Habilidades
- Revision de Codigo
- Revision de Rendimiento de Codigo
Revision de Rendimiento de Codigo
Revisa codigo por problemas de rendimiento: bucles O(n²), fugas de memoria, renders innecesarios y queries lentos.
El Problema
Los bugs de rendimiento rara vez generan errores — solo hacen todo mas lento. Un bucle anidado que funciona bien con 100 elementos se arrastra con 10,000. Un componente React se re-renderiza 47 veces por tecla presionada porque un callback se recrea en cada render. Una consulta de base de datos obtiene 50 registros relacionados uno por uno en vez de un solo join. Estos problemas se entregan sin notarse hasta que los usuarios se quejan.
El Prompt
Revisa el siguiente codigo por problemas de rendimiento. Actua como un ingeniero de rendimiento perfilando un sistema en produccion bajo alta carga.
LENGUAJE/FRAMEWORK: [ej. TypeScript/React, Python/Django, Rust]
ESCALA ESPERADA: [ej. 10k usuarios concurrentes, 1M filas en BD, dispositivos moviles]
CODIGO:
[pegar codigo aqui]
Analiza en estas dimensiones de rendimiento:
1. **Complejidad Algoritmica**
- Identificar operaciones O(n^2) o peores (bucles anidados, escaneos repetidos)
- Marcar operaciones que deberian usar Set/Map para lookups O(1)
- Verificar computacion redundante que podria cachearse/memoizarse
2. **Memoria**
- Asignaciones de objetos grandes dentro de bucles o hot paths
- Falta de limpieza (event listeners, intervalos, subscripciones)
- Arrays/caches sin limites que crecen indefinidamente
3. **Rendering (Frontend)**
- Componentes re-renderizandose sin cambios en props
- Falta de useMemo/useCallback para computaciones costosas
- Layout thrashing (leer DOM → escribir DOM → leer DOM)
4. **I/O y Red**
- Patrones N+1 (obtener datos relacionados en bucles)
- Falta de paginacion en endpoints de listas
- Awaits secuenciales que podrian ser Promise.all
- Falta de deduplicacion de requests o caching
5. **Bundle y Carga**
- Imports grandes que podrian ser lazy-loaded
- Operaciones sincronas bloqueando el hilo principal
Para cada problema, proporciona:
- **Ubicacion**: Archivo y linea
- **Impacto**: Estimacion cuantificada (ej. "47 re-renders por tecla")
- **Severidad**: Critico / Moderado / Menor
- **Fix**: Codigo optimizado de reemplazo
- **Tradeoff**: Costo de legibilidad o complejidad de la optimizacion
Ejemplo de Salida
## Revision de Rendimiento: 5 problemas encontrados
### Critico: Patron N+1 Query
Ubicacion: src/api/orders.ts:23
Impacto: 1 query por item. Con 200 ordenes × 5 items = 1,000 queries en vez de 2.
Fix:
const orderIds = orders.map(o => o.id);
const items = await db.query("SELECT * FROM items WHERE order_id IN (?)", [orderIds]);
### Moderado: Re-renders Innecesarios
Ubicacion: src/components/SearchResults.tsx:15
Fix: Envolver con useMemo:
const filtered = useMemo(() => results.filter(r => r.name.includes(query)), [results, query]);
Cuando Usar
Ejecutar antes de deployar funcionalidades que manejan listas, contenido generado por usuarios o consultas de BD a escala. Especialmente valioso al pasar del prototipo (100 registros) a produccion (100,000 registros).
Tips Pro
- Especificar la escala — “1,000 usuarios” y “1,000,000 usuarios” demandan estrategias de optimizacion completamente diferentes.
- Pedir anotaciones Big-O — “Anota cada funcion con su complejidad de tiempo y espacio.”
- Perfilar primero, optimizar despues — usar esta revision para identificar sospechosos, luego confirmar con datos reales de profiling.