Memoización Estratégica (Rerender Memo)

Evita recalcular operaciones pesadas como la generación de tramas dither, filtrado sobre tablas de datos grandes o búsquedas difusas en paletas de comandos cuando las entradas no han cambiado.

1. Antipatrón vs Patrón Recomendado

// ANTIPATRÓN: Filtra 1,000 filas en cada evento de entrada del usuario
function filtrarComponentes(termino: string) {
  return CATALOGO_COMPLETO.filter(c => c.name.includes(termino));
}
 
// PATRÓN RECOMENDADO: Caché indexada en memoria
const busquedaCache = new Map<string, typeof CATALOGO_COMPLETO>();
 
function buscarConCache(termino: string) {
  const normalizado = termino.trim().toLowerCase();
  if (busquedaCache.has(normalizado)) {
    return busquedaCache.get(normalizado)!;
  }
  const resultado = CATALOGO_COMPLETO.filter(c =>
    c.name.toLowerCase().includes(normalizado) || c.description.toLowerCase().includes(normalizado)
  );
  busquedaCache.set(normalizado, resultado);
  return resultado;
}

2. Nodos de Audio en Web Audio API

En AudioSynth.astro, los buffers acústicos y sintetizadores procedurales se memorizan para evitar instanciar osciladores repetidos en cada interacción de clic.