AEM Optimización de cachés del sitio

AEM La optimización del almacenamiento en caché dentro de la arquitectura de su es una de las formas más rápidas de obtener un gran aumento del rendimiento. AEM Este artículo se centra en explicar cómo optimizar las distintas cachés disponibles dentro de una arquitectura de.

Descripción description

Entorno

Adobe Experience Manager

Problemas/Síntomas

AEM ¿Cómo optimizar las cachés del sitio de la?

AEM Arquitectura y almacenamiento en caché de

AEM En todas las arquitecturas de la, el usuario encuentra varias capas de caché al visitar el sitio. AEM Hay 4 capas de caché que se deben tener en cuenta en una arquitectura de caché estándar. Esto incluye las instancias del explorador web, CDN, Dispatcher AEM y.

Resolución resolution

A. Almacenamiento en caché del explorador

El primer nivel de caché que un usuario encuentra en una visita repetida al sitio es su propio explorador. El almacenamiento en caché a nivel de explorador se suele realizar mediante la Cache-Control: max-age=… respuesta header. La configuración de max-age indica al explorador durante cuántos segundos debe almacenar el archivo en caché antes de intentar "revalidarlo" o solicitarlo de nuevo desde el sitio. Este concepto de caché max-age se conoce comúnmente como "Caducidad de caché" o TTL ("Tiempo de vida").

Hay varias opciones (o "directivas") dentro del encabezado Cache-Control que afectan la forma en que se produce el almacenamiento en caché. Estas son algunas directivas comunes:

  1. private: la directiva privada del encabezado Cache-Control hace que el archivo solo se almacene en caché en el explorador, no en cachés intermedias como CDN. Un uso práctico de esta directiva sería si su página incluye contenido personalizado o específico del usuario.

    Ejemplo de uso: Cache-Control: max-age=300, private

  2. s-maxage: la directiva s-maxage del encabezado Cache-Control le permite establecer un TTL diferente para cachés compartidas como CDN. Cuando se establece este valor, el explorador utiliza lo que se establece en max-age y otras cachés respetan la configuración de s-maxage en su lugar.

    Ejemplo de uso: Cache-Control: max-age=600, s-maxage=300

Todos los exploradores modernos admiten el encabezado Cache-Control; sin embargo, algunos encabezados obsoletos ya existen de HTTP/1.0 que aún pueden afectar el almacenamiento en caché. Estos encabezados son Caduca y Pragma. Si no necesita admitir exploradores muy antiguos, no envíe esos encabezados de respuesta.

Además del almacenamiento en caché, la revalidación también es un concepto importante. La revalidación se basa en los encabezados Last-Modified(response) / If-Modified-Since (request) y en los encabezados ETag (response) / If-None-Match (request).

Precaución al probar el explorador:

Al probar el almacenamiento en caché en Google Chrome, si realiza la prueba sobre https y tiene un certificado firmado automáticamente, no se almacenará en caché nada. Chrome no almacenará en caché las respuestas ni realizará la revalidación cuando haya un certificado que no sea de confianza o no sea válido.

Nota sobre Dispatcher:

AEM Hay un problema con la versión 4.2.3 y versiones anteriores de Dispatcher en las que la caché de /enableTTL solo usa la directiva max-age. Esto significa que incluso cuando se establecen las directivas private o s-maxage, aún se almacenaría en caché si se establece max-age. Este problema se resuelve en Dispatcher 4.2.4 y versiones posteriores.

B. Almacenamiento en caché de CDN

Una red de distribución de contenido (CDN) o "red de distribución de contenido" es una red distribuida de servidores web diseñados para almacenar en caché y ofrecer contenido desde la ubicación más cercana a los usuarios. Esto reduce los saltos de red y la distancia desde el equipo del usuario al contenido, lo que reduce "Tiempo de ida y vuelta" (RTT). RTT es el tiempo que tarda el explorador en enviar una solicitud a su sitio y recibir una respuesta. La competencia en el espacio del proveedor de CDN ha hecho que las CDN sean muy rentables. Esto facilita la decisión de utilizar una CDN para el sitio. Si todavía no usa una red de distribución de contenido (CDN), entonces definitivamente debería incorporar una red de distribución de contenido (CDN) en su sitio.

Hay muchos proveedores de CDN, cada uno con diferentes características y configuraciones.

¿Cómo funciona el almacenamiento en caché de CDN?

Las CDN almacenan en caché el contenido siguiendo reglas similares a las de los navegadores. Se basan en el encabezado Cache-Control HTTP response y, por lo general, vuelven al encabezado Expires si no se encuentra el encabezado Cache-Control.

La mayoría de las CDN ofrecen alguna forma de almacenar en déclencheur un vaciado manual de la caché.  En muchos casos, los vaciados de caché tienen cierto retraso (por ejemplo, 15 minutos) en cuanto a la propagación a todos los servidores Edge que tienen sus archivos.

Optimizando uso de CDN

Hay algunas cosas que debe hacer para asegurarse de que almacena en caché los archivos de forma óptima en la CDN:

  1. Use una red de distribución de contenido (CDN) que admita las directivas stale-while-revalidate y stale-if-error en el encabezado Cache-Control.

    • stale-while-revalidate: esta directiva indica a la CDN que proporcione la versión antigua (ya almacenada en caché) del archivo mientras recupera una nueva después de que el archivo de caché haya caducado.
    • stale-if-error: de forma similar, esta directiva indica a la CDN que proporcione la versión antigua (ya almacenada en caché) del archivo cuando el origen responda con un error durante la revalidación.
  2. GZip comprime las respuestas de todos los tipos de archivos que no estén precomprimidos.

    Debe hacerlo desde el nivel de Dispatcher. Esto garantizará que reduce el número de bytes enviados a la CDN. Las CDN suelen cargar los bytes transferidos, por lo que la compresión de las respuestas reduce los costes.

    • Habilite la compresión GZip en el nivel Dispatcher: Apache - use mod_deflate. Tenga cuidado con el uso de mod_deflate de la variable. En determinados casos, el encabezado Vary puede hacer que la CDN y el explorador omitan el almacenamiento en caché por completo.

    • IIS de Microsoft: use compresión dinámica.

    • No permita la compresión gzip de archivos grandes o archivos que ya estén comprimidos. Tenga en cuenta que la mayoría de los formatos de imagen y vídeo ya están precomprimidos. Comprimirlos sobre la marcha en el servidor web supone un coste muy elevado para el rendimiento.

      • En Apache, esto se puede hacer mediante la directiva AddOutputFilterByType: AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
      • En IIS, esto se puede controlar mediante la configuración < dynamicTypes>.
    • Si su proveedor de CDN admite Edge-side Includes (ESI), aproveche esta función. AEM Los componentes de la se pueden desglosar mediante ESI. Para ello, utilice Apache \[ Sling Dynamic Includes\] o implemente una solución personalizada. Resulta útil cuando tiene páginas bastante estáticas pero ofrece contenido más dinámico en algunas partes de la página. En estos casos, básicamente está dividiendo la página en varios archivos CDN. De este modo, puede almacenar en caché diferentes partes de la página durante diferentes períodos de tiempo.

Proveedores de CDN populares

Esta es una lista de algunos proveedores de CDN populares:

Hay varios más, cada uno con características diferentes.

Precaución:

Tenga cuidado con el encabezado de respuesta Vary. En algunos casos, Vary puede hacer que tanto la red de distribución de contenido (CDN) como el explorador omitan el almacenamiento en caché por completo. Como regla general, evite agregar Vary excepto Vary: Accept-Encoding (aplicado únicamente cuando la respuesta está comprimida en gzip). En otras palabras, si necesita "variar" el resultado de una respuesta, utilice una dirección URL diferente.

Por ejemplo, si tiene una versión diferente de HTML para móvil y escritorio, utilice una URL diferente. Esto permitirá que las CDN y los exploradores almacenen en caché de forma más eficaz.

AEM C. Almacenamiento en caché de Dispatcher

AEM Si la caché de la CDN ha caducado, la solicitud llegará a la caché de Dispatcher de. En este nivel hay muchas cosas que se pueden hacer para optimizar el almacenamiento en caché.

Dado que este es un tema más amplio, consulte este artículo para obtener detalles sobre cómo optimizar la caché de Dispatcher.

AEM D. Instancias de Publish

AEM En el nivel de la caché, hay algunas cosas que se deben hacer para optimizar las distintas capas de caché:

  1. AEM Establezca los siguientes encabezados de respuesta HTTP que no están configurados de forma predeterminada por el valor de la opción de configuración de la opción de respuesta de la interfaz de usuario.

    1. Cache-Control: max-age=… - Para establecer este encabezado, se podría usar ACS Commons - Dispatcher TTL, o se podría implementar código personalizado para establecerlo.
    2. Última modificación: si el contenido de la página es relativamente estático, como un artículo, puede establecer su encabezado de última modificación en la fecha/hora de cq:lastModified (última vez que se modificó el artículo). Sin embargo, si la página es dinámica con los resultados de la consulta JCR contenidos en el contenido del componente, lo mejor sería configurarla para que utilice la fecha/hora actual.
    3. ETag: si decide usar esto en lugar de Última modificación, podría escribir un ReplicationEventListener que escuche activaciones de página y genere un hash md5 del contenido de la página. Esto se puede establecer como una propiedad en el nodo jcr:content de la página en la instancia de autor. Cuando las páginas se duplican, se envía a las instancias de publicación. Para los componentes de página con contenido relativamente estático, esto podría funcionar correctamente, pero si la página es algo dinámica o hace referencia a mucho contenido, ETag tendría que omitirse (o calcularse).
  2. Si el sitio tiene contenido personalizado/dinámico:

    1. Use Apache Sling Dynamic Includes para dividir el contenido de modo que diferentes partes de la página se puedan almacenar en caché durante diferentes períodos de tiempo.

      1. El almacenamiento en caché se puede realizar con las siguientes tecnologías:

        • Edge-side Includes (ESI) en la CDN
        • Inclusiones del lado del servidor (SSI) en el servidor web
        • AJAX Javascript y XML asíncronos () en el explorador
      2. Los componentes de la página se pueden dividir en solicitudes independientes que se pueden almacenar en caché durante diferentes períodos de tiempo. Las partes de la página que son relativamente estáticas se pueden almacenar en caché durante períodos de tiempo mucho más largos.

    2. Considere utilizar la característica de caché HTTP de ACS Commons.

  3. Optimizar bibliotecas de cliente.

    1. Habilitar la minificación en las bibliotecas del cliente.

    2. Si los archivos de la biblioteca del cliente están preminimizados, desactive la minificación en esa biblioteca del cliente. Edite el nodo cq

      1. Establezca la propiedad jsProcessor de tipo String[ ] con el valor min:none
      2. y establezca la propiedad cssProcessor de tipo String[ ] con el valor min:none
      3. Ver más detalles, aquí.
    3. Incruste bibliotecas de cliente para minimizar y reducir archivos js y css.

    4. Implemente versioned-clientlibs desde ACS Commons para permitir que CDN y Dispatcher almacenen en caché archivos JS y CSS durante períodos de tiempo más largos.

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f