Skip to main content

Caché de salida

Visión general

La caché de salida (output cache) mejora el rendimiento almacenando en el servidor el contenido HTML ya generado de una página. En la siguiente petición, si existe una copia en caché, el servidor la sirve directamente, reduciendo el trabajo y el tiempo de respuesta.

info

A diferencia de la caché de datos (ver Caché), que almacena entidades y resultados de consulta, la caché de salida almacena el HTML renderizado de las páginas.

Estrategia: donut hole caching

El sistema divide la página en dos capas:

  • Capa externa (estática): se cachea por completo (HTML, CSS, JS).
  • Capa interna (dinámica): se genera fresca en cada petición para los datos específicos del usuario o en tiempo real.

Así se equilibra el beneficio de la caché con la frescura del contenido que debe cambiar en cada solicitud.

Registro de rutas cacheables

El enfoque es opt-in: nada se cachea sin declararlo explícitamente. Los módulos declaran sus rutas cacheables implementando IRutaAlmacenableCacheProveedor. El proveedor de caché de salida en sí es IMemoriaCacheSalidaProveedor, y cada fragmento cacheado se representa con MemoriaCacheElemento.

Control de visualización e invalidación

IControlVisualizacion (ControlVisualizacion) automatiza la invalidación de la caché registrando qué entidades aparecen en cada página. Cuando esas entidades se actualizan o eliminan, las páginas cacheadas asociadas se invalidan automáticamente.

Para escenarios más complejos, IMemoriaCacheSalidaInvalidacionObservador permite registrar lógica de invalidación personalizada para entidades y configuraciones, habilitando una gestión de caché sofisticada.

note

La caché de salida en Crono está implementada en el módulo Crono.MemoriaCacheSalida. Al construir módulos propios, ten en cuenta la caché declarando tus rutas cacheables y, si es necesario, tu lógica de invalidación mediante los observadores anteriores.