El equipo activa el caché de página completa. El TTFB cae de 800 ms a 40 ms: victoria. Excepto que el banner "Hola administrador" aparece a los visitantes anónimos, el contador del carrito muestra 0 para todos y la prueba A/B ofrece la variante B al 100% de los usuarios durante seis horas.
La caché de página dinámica no es un interruptor. Es un contrato de variabilidad: qué partes de la respuesta HTML son iguales para qué segmentos de usuarios y durante cuánto tiempo. Mal definido, acelera el sitio creando errores silenciosos, peor que una lentitud honesta.
Matrix: ¿almacenable en caché o no?
| Contenido | ¿Caché de página completa? | Alternativa |
|---|---|---|
| Artículo publicado estático | Sí (TTL + purga) | Caché largo de CDN |
| Inicio lista editorial | Sí TTL corto | Purgar para publicar |
| Resultados de la búsqueda | Rara vez (cadena de consulta) | Caché de claves estandarizado |
| Cuenta/página de administración | No | Omitir caché |
| Carrito/pagar | No | sin tienda |
| Precio de las acciones en tiempo real | No en el caparazón | Fragmento AJAX |
Regla de oro: si Set-Cookie o Vary: la cookie es necesaria, el caché del borde de la página es sospechoso.
Claves de caché: lo que diferencia las respuestas
Una clave "URL" ingenua es suficiente para un blog. Para un sitio dinámico, combine la URL, el idioma, la clase de dispositivo, la prueba de depósito A/B y el segmento de autenticación, no el ID de usuario en la clave de página completa (demasiadas variaciones). Lista blanca de parámetros de consulta. Omita el caché si hay una cookie de sesión presente.
Estrategias por pila
WordPress: caché de objetos más caché de páginas, exclusión /wp-admin, cookies de carrito de WooCommerce.
Symfony/Laravel: caché del kernel HTTP, invalidación de etiquetas Redis, ESI para bloqueos de usuarios.
Sin cabeza: CDN en JSON público; nunca en puntos finales autenticados sin llave.
nginx fastcgi_cache: fastcgi_cache_bypass y fastcgi_no_cache si es cookie de sesión.
Invalidación: evitar el pánico “vaciar todo”
TTL solo para contenido no crítico. Purgar URL al modificarla. Etiquetas/Clave sustituta para la publicación de CMS. Patrón de prohibición en el rediseño del tema: con precaución en la imagen original. Al publicar, purgue la página principal más las taxonomías más el artículo.
Consulte Encabezados de caché HTTP y Varnish: usuarios conectados.
CDN plus origen: dos niveles
La caché perimetral alivia el origen. Origen → borde de encabezados Cache-Control consistentes. s-maxage para CDN, max-age para navegador. No oculte las respuestas con Set-Cookie a menos que se configure explícitamente el borde.
Lo mejor: el caché se acelera o miente; rara vez ambas cosas sin diseño
Mida la tasa de aciertos y la tasa de error funcional posterior al caché.
Decide y avanza sin puntos ciegos
Primero clasifique las URL como almacenables en caché, no almacenables en caché o fragmentadas. Configure claves y pruebe con sesión y sin ella. Vincula la invalidación a la publicación del CMS. Audite el origen y los encabezados CDN (curl -I). Supervise las alertas HIT/MISS y obsoletas más allá del TTL empresarial. Compare hosts compatibles con Surrogate-Key a través del directorio.
Preguntas frecuentes
¿Podemos ocultar una página con un usuario que ha iniciado sesión?
Rara vez almacena en caché toda la página. Separe un shell público almacenable en caché y bloques privados cargados en AJAX o ESI, o defina claves estrictas por función, sin siquiera mostrar una página de miembro a un visitante anónimo.
¿Qué duración TTL para un sitio de noticias?
Para el hogar y las listas, espere entre 60 y 300 segundos con la purga al publicarse. El contenido publicado puede durar más. El carrito de compras y el proceso de pago nunca deben pasar por un caché de página completa.
¿Cómo invalidar correctamente?
Controle la purga por evento: clave URL, etiqueta o clave sustituta en cada copia de seguridad del CMS. Reserve la descarga global para incidentes en los que acepte un pico de carga en el origen.
¿Redis o archivos para caché de página?
Los archivos (Varnish, fastcgi_cache nginx) sobresalen por su rendimiento sin formato. Redis es adecuado para invalidaciones detalladas por etiqueta. La arquitectura más común combina CDN en el borde y caché de origen.
El almacenamiento en caché dinámico comienza enumerando lo que debería permanecer falso, no lo que puede desaparecer rápidamente.
