Optimera AEM Site Caches

Optimering av cachning i din AEM-arkitektur är ett av de snabbaste sätten att få en rejäl prestandaökning. I den här artikeln beskrivs hur du optimerar de olika cacheminnen som finns i en AEM-arkitektur.

Beskrivning description

Miljö

Adobe Experience Manager 6.5

Problem/symtom

Hur optimerar man cacheminnen för AEM webbplatser?

AEM-arkitektur och cachning

I alla AEM-arkitekturer stöter användaren på flera cachelager när man besöker webbplatsen. Det finns fyra cachelager att tänka på i en AEM standardarkitektur. Detta gäller webbläsare, CDN, Dispatcher och AEM.

Upplösning resolution

A. Webbläsarcachelagring

Den första cachenivån som en användare stöter på vid ett upprepat besök på webbplatsen är deras egen webbläsare. Cachelagring på webbläsarnivå sker vanligtvis via Cache-Control: max-age=… response header . Inställningen max-age anger för webbläsaren hur många sekunder filen ska cachelagras för innan ett försök görs att "omvalidera" eller begära den från platsen igen. Konceptet för cachen max-age kallas vanligen för "Cacheförfallodatum" eller TTL ("TTL-tid").

Det finns olika alternativ (eller "direktiv") i rubriken Cache-Control som påverkar hur cachelagring sker. Här är några vanliga direktiv:

  1. private - direktivet private i rubriken Cache-Control gör det så att filen bara cachelagras i webbläsaren, inte i mellanliggande cacheminnen som CDN. Ett praktiskt sätt att använda det här direktivet är om sidan innehåller anpassat/användarspecifikt innehåll.

    Exempelanvändning: Cache-Control: max-age=300, private

  2. s-maxage - direktivet s-maxage i huvudet Cache-Control gör att du kan ange en annan TTL för delade cacheminnen, till exempel CDN. När det här värdet anges använder webbläsaren det som är angivet i max-age och andra cacheminnen respekterar inställningen s-maxage i stället.

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

Moderna webbläsare har alla stöd för rubriken Cache-Control, men det finns några gamla inaktuella rubriker från HTTP/1.0 som fortfarande kan påverka cachelagringen. Rubrikerna är Förfaller och Pragma. Om du inte behöver stöd för mycket gamla webbläsare ska du inte skicka dessa svarshuvuden.

Förutom cachelagring är omvalidering också ett viktigt koncept. Förlängningen bygger på rubrikerna Senast ändrad(svar) / Om-ändrad-Sedan (begäran) och ETag (svar) / Om-ingen-Matcha} rubriker (begäran).

Varning vid webbläsartestning:

Om du testar cachelagring i Google Chrome och har ett självsignerat certifikat kommer ingenting att cachelagras om du testar över https. Chrome kan inte cachelagra svar eller utföra omvalidering om det finns ett otillförlitligt eller ogiltigt certifikat.

Obs!

Det har uppstått ett problem med AEM Dispatcher v4.2.3 och tidigare versioner där endast /enableTTL cachelagrar med direktivet max-age. Detta innebär att även om direktiven private eller s-maxage är inställda så cachelagras det ändå om max-age är inställt. Problemet åtgärdas i Dispatcher 4.2.4 och senare.

B. CDN-cache

Ett CDN eller "Content Delivery Network" är ett distribuerat nätverk av webbservrar som är utformade för att cachelagra och leverera innehåll från den plats som ligger närmast dina användare. Detta minskar nätverkshopp och avstånd från användarens dator till ditt innehåll, vilket reducerar "Rund restid" (RTT). RTT är den tid det tar för webbläsaren att skicka en begäran till webbplatsen och få ett svar. Konkurrensen på CDN-leverantörens område har gjort CDN:er mycket kostnadseffektiva. Detta gör det enkelt att välja ett CDN för din webbplats. Om du inte använder ett CDN än bör du definitivt infoga ett CDN på din plats.

Det finns många CDN-leverantörer, som alla har olika funktioner och konfigurationer.

Hur fungerar CDN Caching?

CDN:er cachelagrar innehåll enligt regler som liknar webbläsare. De förlitar sig på rubriken Cache-Control HTTP response och återgår vanligtvis till rubriken Expires om det inte finns någon Cache-Control-rubrik.

De flesta CDN:er kan utlösa en manuell tömning av cachen.  I många fall har cachetömningar viss fördröjning (t.ex. 15 minuter) när det gäller att sprida till alla edge-servrar som har dina filer.

Optimerar CDN-användning

Det finns några saker som du måste göra för att vara säker på att du cachelagrar filer optimalt i CDN:

  1. Använd ett CDN som har stöd för direktiven stale-while-revalidate och stale-if-error i rubriken Cache-Control.

    • stale-while-revalidate - det här direktivet talar om för CDN att den gamla (redan cachelagrade) versionen av filen ska hanteras när en ny hämtas när cachefilen har gått ut.
    • stale-if-error - på liknande sätt anger det här direktivet att CDN ska hantera den gamla (redan cachelagrade) versionen av filen när ursprunget svarar med ett fel under omvalideringen.
  2. GZip komprimerar svar för alla filtyper som inte är förkomprimerade.

    Du bör göra detta på dispatchernivå. Detta säkerställer att du minskar antalet byte som skickas till CDN. CDN-nummer debiteras vanligtvis av byte som överförts, vilket minskar kostnaderna genom att komprimera svaren.

    • Aktivera GZip-komprimering på Dispatcher-nivå: Apache - använd mod_deflate. Var försiktig med mod_deflate när du använder variabeln. I vissa fall kan rubriken Variera göra så att CDN och webbläsaren hoppar över all cachelagring.

    • Microsoft IIS - använd dynamisk komprimering.

    • Tillåt inte gzip-komprimering av stora filer eller filer som redan är komprimerade. Observera att de flesta bild- och videoformat redan är förkomprimerade. Att komprimera dem i farten på webbservernivå är mycket dyrt för prestandan.

      • I Apache kan detta göras via direktivet AddOutputFilterByType: AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
      • På IIS kan detta styras via konfigurationen < dynamicTypes >.
    • Om din CDN-leverantör stöder SSI (Edge-side Includes) kan du använda den här funktionen. AEM-komponenter kan delas upp med ESI. Använd Apache \[ Sling Dynamic Includes \] eller implementera en anpassad lösning för att göra detta. Det är användbart när du har tämligen statiska sidor, men vill visa mer dynamiskt innehåll på några delar av sidan. I dessa fall delar du upp sidan i flera CDN-filer. På så sätt kan du cachelagra olika delar av sidan under olika tidsperioder.

Populära CDN-providers

Här är en lista över några populära CDN-leverantörer:

Det finns flera funktioner, var och en med olika funktioner.

Varning:

Var försiktig med svarsrubriken Variera. I vissa fall kan Variabel göra att både CDN och webbläsaren hoppar över cachelagring helt. Som en tumregel bör du undvika att lägga till Variera förutom för Variera: Acceptera-kodning (används bara när svaret är GZIP-komprimerat). Med andra ord, om du behöver"variera" resultatet av ett svar, ska du använda en annan URL.

Om du till exempel har en annan version av HTML för mobilen än för datorer ska du använda en annan URL. Detta gör att CDN:er och webbläsare kan cachelagra mer effektivt.

C. AEM Dispatcher Caching

Om CDN-cachen har gått ut kommer begäran att nå AEM dispatcher-cachen. På den här nivån finns det mycket som kan göras för att optimera cachningen. Mer information finns i Hur du optimerar Dispatcher-cachen?

D. AEM Publish Instances

På AEM-nivå finns det några saker som bör göras för att optimera de olika cachelagren:

  1. Ange följande HTTP-svarshuvuden som inte anges av AEM som standard.

    1. Cache-Control: max-age=… - Om du vill ange det här huvudet kan ACS Commons - Dispatcher TTL användas, eller så kan du implementera anpassad kod för att ange det.
    2. Senast ändrad - Om sidinnehållet är relativt statiskt, t.ex. en artikel, kan du ange dess senast ändrade sidhuvud till cq:lastModified datum/tid (senaste gången artikeln ändrades). Men om sidan är dynamisk med JCR-frågeresultat som finns i komponentinnehållet är det bäst att ställa in den så att den använder aktuellt datum/tid.
    3. ETag - Om du bestämmer dig för att använda detta i stället för Senast ändrat kan du skriva en ReplicationEventListener som lyssnar efter sidaktiveringar och skapar en md5-hash av sidinnehållet. Detta kan anges som en egenskap på jcr:content-noden på sidan i författarinstansen. När sidorna replikeras skickas de till publiceringsinstanserna. För sidkomponenter med innehåll som är relativt statiskt kan det fungera bra, men om sidan är något dynamisk eller refererar till mycket innehåll måste ETag utelämnas (eller beräknas).
  2. Om webbplatsen har anpassat/dynamiskt innehåll:

    1. Använd Apache Sling Dynamic Includes för att dela upp innehållet så att olika delar av sidan kan cachas för olika tidsperioder.

      1. Cachelagring kan göras med följande tekniker:

        • ESI (Edge side Includes) på CDN
        • SSI (Server-side Includes) på webbservern
        • Asynkron JavaScript och XML (AJAX) i webbläsaren
      2. Komponenter på sidan kan delas upp i separata begäranden som kan cachas för olika tidsperioder. Delar av sidan som är relativt statiska kan cachas under mycket längre tidsperioder.

    2. Använd funktionen HTTP-cache för ACS-kommandon.

  3. Optimera klientbibliotek.

    1. Aktivera miniatyrbilder i klientbibliotek.

    2. Om filerna i klientbiblioteket är förminifierade inaktiverar du miniatyrbilder i det klientbiblioteket. Redigera cq

      1. Ange egenskapen jsProcessor av typen String [ ] med värdet min:none
      2. och ange egenskapen cssProcessor av typen String [ ] med värdet min:none
      3. Mer information finns här.
    3. Bädda in klientbibliotek för att minimera och minska antalet js- och css-filer.

    4. Implementera versioned-clientlibs från ACS Commons så att CDN och Dispatcher kan cachelagra js- och css-filer under längre tidsperioder.

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