AEM Optimización de cachés del sitio

Descripción description

Entorno

Adobe Experience Manager

Problemas/Síntomas

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.

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.  AEM Esto incluye las instancias del explorador web, la red de distribución de contenido (CDN), Dispatcher y la interfaz de usuario de.
screenshot_2018-03-25160541

Resolución resolution

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 el  Cache-Control: max-age=…  respuesta encabezado.  El  max-age  La configuración 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  Normalmente, se denomina "Caducidad de la caché" o TTL ("Tiempo de vida").

Hay varias opciones (o "directivas") dentro de la variable  Cache-Control  encabezado que afectan a cómo se produce el almacenamiento en caché.  Estas son algunas directivas comunes:

  1. palo de golf privado  - el  privado  en la sección  Cache-Control  lo convierte en un archivo que solo se almacenaría 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, privado

  2. ​s-maxage  - el  s-maxage  en la sección  Cache-Control  permite establecer un TTL diferente para las cachés compartidas, como las CDN.  Cuando se establece este valor, el explorador utiliza el establecido en  max-age  y otras cachés respetarían el  s-maxage  en su lugar.

    Ejemplo de uso:

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

Todos los exploradores modernos admiten el  Cache-Control  encabezado, sin embargo, algunos encabezados obsoletos existen desde HTTP/1.0 que aún puede tener un efecto en 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  Última modificación  (respuesta) /  If-Modified-Since  (solicitud) y los encabezados  ETag  (respuesta) /  Si-Ninguno-Coincidencia  Encabezados (solicitud).

Precaución al probar el explorador:

Al probar el almacenamiento en caché en Google Chrome, si está realizando pruebas sobre https y tiene un certificado autofirmado, 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 el que la variable  /enableTTL  solo cachés que utilizan  max-age  Directiva.  Esto significa que incluso cuando  privado  o  s-maxage  se establecen las directivas que seguiría almacenando en caché si  max-age  está configurado.  Este problema se resuelve en Dispatcher 4.2.4 y versiones posteriores.

Almacenamiento en caché de CDN

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 utiliza una CDN, debe incorporar definitivamente una 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.  Dependen de la  Cache-Control  HTTP respuesta encabezado y, por lo general, volver al  Caduca  encabezado si no  Cache-Control  se ha encontrado el encabezado.

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.

Optimización del 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. Utilice una CDN que admita  stale-while-revalidate  y  stale-if-error  directivas en la  Cache-Control  encabezado.

    • 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.

  • Habilitar la compresión GZip en el nivel de Dispatcher: Apache: uso 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.

  • Microsoft IIS: uso 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 el < dynamicTypes> configuración.

  • Si su proveedor de CDN admite Edge-side Includes (ESI) y, a continuación, aproveche esta función. AEM Los componentes de la se pueden desglosar mediante ESI. Para ello, utilice Apache [ Sling Dynamic Includes] (https://github.com/Cognifide/Sling-Dynamic-Include) 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 Variar encabezado de respuesta.  En algunos casos,  Variar  puede hacer que tanto la CDN como el explorador omitan el almacenamiento en caché por completo.  Como regla general, evite añadir  Variar  excepto para  Vary: Accept-Encoding  (se aplica solo 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 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 se trata de un tema más amplio, consulte este artículo para obtener más información sobre cómo optimizar la caché de dispatcher.

Instancias de publicación de AEM

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, ACS Commons - TTL de Dispatcher podría utilizarse, o 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 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 utilizar este en lugar de  Última modificación, puede escribir un ReplicationEventListener que escucha las activaciones de la página y genera 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. Uso 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:

        1. Inclusiones del lado del borde (ESI) en la CDN
        2. Inclusiones del lado del servidor (SSI) en el servidor web
        3. AJAX O bien, JavaScript asincrónico y XML () 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 el Función de caché HTTP de ACS Commons.

  3. Optimizar bibliotecas de cliente.

    1. Habilitar minificación en bibliotecas de 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. Establecer propiedad  jsProcessor  de tipo cadena[ ] con valor  min:ninguno
      2. y establecer propiedad  cssProcessor  de tipo cadena[ ] con valor  min:ninguno
      3. Ver más detalles, aquí.
    3. Incrustar cliente bibliotecas para minimizar y reducir los archivos js y css.

    4. Implementación versiones-clientlibs de 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