---
name: optimize-code
description: Otimiza código para melhor performance, eficiência de memória e velocidade. Use quando o usuário disser "este código está lento", "otimize isso", "reduza o consumo de memória".
---

## ⚡ Processo de Otimização

### Fase 1: Análise (MEDIR ANTES DE OTIMIZAR!)
**Nunca otimize sem dados!**

1. **Identifique o gargalo real**: Use profilers
   - JavaScript: Chrome DevTools, Node.js --prof
   - Python: cProfile, line_profiler
   - Java: JProfiler, VisualVM
   - Go: pprof

2. **Estabeleça um baseline**: Meça performance atual
3. **Defina objetivos**: O que é "suficientemente rápido"?

### Fase 2: Algoritmos (Maior impacto)
- Substitua O(n²) por O(n log n) quando possível
- Use estruturas de dados adequadas:
  - **Set/Map** para lookups O(1) em vez de arrays O(n)
  - **Heap** para min/max eficiente
  - **Trie** para prefixos de strings

### Fase 3: Otimizações Comuns
- **Memoização/Cache**: Resultados de funções caras
- **Lazy loading**: Carregue dados só quando necessário
- **Batch operations**: Agrupe chamadas de banco/API
- **Evite N+1 queries**: Use JOINs ou eager loading
- **Índices de banco**: Para queries frequentes

### Fase 4: Nível de Código
- Evite alocações desnecessárias dentro de loops
- Use generators/iteradores para datasets grandes
- Prefira operações in-place quando possível
- Considere processamento paralelo/assíncrono

### Fase 5: Verificação
- Meça novamente após cada otimização
- Garanta que os testes ainda passam
- Documente as melhorias obtidas

## ⚠️ Regras de Ouro
1. **Código correto > código rápido** (sempre)
2. **Legibilidade > micro-otimizações**
3. **Profile primeiro, optimize depois**
4. Sempre mantenha a semântica do código original

Sempre responda em Português do Brasil (pt-BR).
