5 min lectura • Guide 368 of 877
Workflow de Optimización de Performance
Optimización de performance sin medición es adivinar. Buen trabajo de performance comienza con datos, apunta a bottlenecks específicos, y mide resultados. Esta guía cubre un enfoque sistemático para optimización de performance.
Ciclo de Optimización
| Paso | Acción | Output |
|---|---|---|
| Medir | Baseline actual | Datos |
| Analizar | Encontrar bottleneck | Target |
| Optimizar | Arreglar issue | Cambio |
| Verificar | Medir de nuevo | Resultado |
Estableciendo Objetivos
OBJETIVOS DE PERFORMANCE
════════════════════════
DEFINE TARGETS:
┌─────────────────────────────────────────────────────────────┐
│ │
│ Sé específico: │
│ ├── "Carga de página < 2 segundos" │
│ ├── "Response de API p95 < 200ms" │
│ ├── "Throughput > 1000 req/sec" │
│ ├── "Error rate < 0.1%" │
│ ├── Targets medibles │
│ └── Enfocados en usuario │
│ │
└─────────────────────────────────────────────────────────────┘
PERCENTILES:
┌─────────────────────────────────────────────────────────────┐
│ │
│ p50: La mitad de requests son más rápidos │
│ (experiencia típica) │
│ │
│ p95: 95% de requests son más rápidos │
│ (mayoría de usuarios) │
│ │
│ p99: 99% de requests son más rápidos │
│ (peor caso común) │
│ │
│ ¿Por qué no promedios? │
│ → Promedios ocultan outliers │
│ → Pocos requests lentos destruyen experiencia │
│ │
└─────────────────────────────────────────────────────────────┘
Proceso de Medición
WORKFLOW DE MEDICIÓN
════════════════════
PASO 1: ESTABLECER BASELINE
┌─────────────────────────────────────────────────────────────┐
│ │
│ Herramientas: │
│ ├── APM (New Relic, Datadog, etc.) │
│ ├── Browser DevTools │
│ ├── Profilers del lenguaje │
│ └── Load testing tools │
│ │
│ Documentar: │
│ ├── Métricas actuales │
│ ├── Condiciones de test │
│ └── Ambiente │
│ │
└─────────────────────────────────────────────────────────────┘
PASO 2: IDENTIFICAR BOTTLENECK
┌─────────────────────────────────────────────────────────────┐
│ │
│ Preguntas: │
│ ├── ¿Dónde se gasta más tiempo? │
│ ├── ¿Qué es CPU-bound vs I/O-bound? │
│ ├── ¿Hay queries lentas? │
│ ├── ¿Network es un factor? │
│ └── ¿Memory es suficiente? │
│ │
│ REGLA: Arregla el bottleneck más grande primero │
│ Optimizar otra cosa no ayuda │
│ │
└─────────────────────────────────────────────────────────────┘
PASO 3: ARREGLAR + MEDIR
┌─────────────────────────────────────────────────────────────┐
│ │
│ 1. Hacer UN cambio │
│ 2. Medir resultado │
│ 3. Documentar impacto │
│ 4. Si mejora: keep + continuar │
│ 5. Si no mejora: revert + investigar más │
│ │
│ NO hacer múltiples cambios juntos │
│ → No sabes qué funcionó │
│ │
└─────────────────────────────────────────────────────────────┘
Técnicas Comunes
OPTIMIZACIONES TÍPICAS
══════════════════════
DATABASE:
┌─────────────────────────────────────────────────────────────┐
│ ├── Agregar índices apropiados │
│ ├── Arreglar N+1 queries │
│ ├── Optimizar queries lentas │
│ ├── Connection pooling │
│ └── Query caching │
└─────────────────────────────────────────────────────────────┘
CACHING:
┌─────────────────────────────────────────────────────────────┐
│ ├── Application-level cache (Redis, Memcached) │
│ ├── HTTP cache headers │
│ ├── CDN para assets estáticos │
│ └── Query result caching │
└─────────────────────────────────────────────────────────────┘
FRONTEND:
┌─────────────────────────────────────────────────────────────┐
│ ├── Lazy loading │
│ ├── Code splitting │
│ ├── Image optimization │
│ ├── Minification + compression │
│ └── Critical CSS inline │
└─────────────────────────────────────────────────────────────┘
ARCHITECTURE:
┌─────────────────────────────────────────────────────────────┐
│ ├── Async processing │
│ ├── Background jobs │
│ ├── Horizontal scaling │
│ └── Service separation │
└─────────────────────────────────────────────────────────────┘
Tracking en GitScrum
TAREAS DE OPTIMIZACIÓN
══════════════════════
TEMPLATE DE STORY:
┌─────────────────────────────────────────────────────────────┐
│ │
│ Story: Optimizar endpoint /api/search │
│ │
│ ESTADO ACTUAL: │
│ p95: 1200ms │
│ Throughput: 50 req/sec │
│ │
│ OBJETIVO: │
│ p95: < 300ms │
│ Throughput: > 200 req/sec │
│ │
│ ACCEPTANCE CRITERIA: │
│ ├── ☐ Baseline documentado │
│ ├── ☐ Bottleneck identificado │
│ ├── ☐ Optimización implementada │
│ ├── ☐ Mejora medida y documentada │
│ └── ☐ No regresiones en otras métricas │
│ │
│ Labels: ⚡performance, 📊measured │
│ │
└─────────────────────────────────────────────────────────────┘
DOCUMENTAR RESULTADO:
┌─────────────────────────────────────────────────────────────┐
│ │
│ RESULTADO: │
│ ├── Cambio: Agregó índice a tabla searches │
│ ├── p95 antes: 1200ms │
│ ├── p95 después: 280ms │
│ ├── Mejora: 76% │
│ └── Notas: Sin impacto en write performance │
│ │
└─────────────────────────────────────────────────────────────┘