AEM-sitecache optimaliseren
Het optimaliseren van caching in uw AEM-architectuur is een van de snelste manieren om een krachtige boost te krijgen. In dit artikel wordt uitgelegd hoe u de verschillende caches die beschikbaar zijn in een AEM-architectuur, kunt optimaliseren.
Beschrijving description
Omgeving
Adobe Experience Manager 6.5
Problemen/symptomen
Hoe kan ik AEM-caches optimaliseren?
Architectuur van AEM en Caching
In alle AEM-architecturen ontmoet de gebruiker meerdere cachelagen bij het bezoeken van uw site. In een standaard AEM-architectuur moeten vier cachelagen in overweging worden genomen. Dit zijn onder andere de instanties Webbrowser, CDN, Dispatcher en AEM.
Resolutie resolution
A. Browser in cache plaatsen
Het eerste cacheniveau dat een gebruiker tijdens een herhaald bezoek van uw site tegenkomt, is zijn eigen browser. Het in cache plaatsen op browser niveau wordt algemeen gedaan via geheime voorgeheugen-controle: max-age=… reactie kopbal . Het maximum-pagina plaatsen vertelt browser hoeveel seconden het dossier voor alvorens te proberen om "opnieuw te bevestigen"of het van de plaats opnieuw te verzoeken zou moeten in het voorgeheugen onderbrengen. Dit concept cache maximum-age wordt algemeen bedoeld als "Vervalsing van het Geheime voorgeheugen"of TTL ("Tijd om te leven").
Er zijn diverse opties (of "richtlijnen") binnen de geheime voorgeheugen-controle kopbal die beïnvloedt hoe het in het voorgeheugen onderbrengen voorkomt. Hier volgen enkele algemene richtlijnen:
-
private - de privé richtlijn in de geheime voorgeheugen-controle kopbal het maakt zodat het dossier slechts in caching in browser, niet in tussenruimten zoals CDNs zou worden. Een praktisch nut voor deze richtlijn zou zijn als uw pagina gepersonaliseerde / gebruiker-specifieke inhoud omvat.
Voorbeeld:
Cache-Control: max-age=300, private -
s-maxage - de s-maxage richtlijn in de geheime voorgeheugen-controle kopbal staat u toe om verschillende TTL voor gedeelde geheime voorgeheugens zoals CDNs te plaatsen. Als deze waarde is ingesteld, gebruikt de browser de instelling die is ingesteld in de maximumleeftijd en voldoen andere caches aan de instelling voor s-maxage.
Voorbeeld:
Cache-Control: max-age=600, s-maxage=300
De moderne browsers allen steunen geheime voorgeheugen-controle kopbal, nochtans, bestaan sommige oude afgekeurde kopballen van HTTP/1.0 die nog een effect op caching kunnen hebben. Deze kopballen zijn verlopen en Pragma . Als u niet zeer oude browsers te hoeven steunen dan verzend die reactiekopballen.
Naast caching, is de herbevestiging ook een belangrijk concept. De erkenning baseert zich op last-Gewijzigde ( reactie ) / indien-Gewijzigd-Sedert ( verzoek ) kopballen, en ETag (reactie) / if-niets-Gelijke (verzoek) kopballen.
Voorzichtigheid op browser het testen:
Als u in Google Chrome caching test, als u over https test en u een zelfondertekend certificaat hebt, wordt niets in de cache geplaatst. Chrome plaatst geen reacties in cache of voert geen validatie uit als er een niet-vertrouwd of ongeldig certificaat is.
Nota op verzender:
Er is een kwestie met AEM Dispatcher v4.2.3 en vroegere versies waar /enableTTL slechts geheime voorgeheugens gebruikend maximum-age richtlijn. Dit betekent dat zelfs wanneer privé of s-maxage richtlijnen worden geplaatst het nog in het voorgeheugen zou plaatsen als maximum-leeftijd wordt geplaatst. Dit probleem is opgelost in Dispatcher 4.2.4 en latere versies.
B. CDN in cache plaatsen
A CDN of het "Netwerk van de Levering van de Inhoud", is een verdeeld netwerk van Webservers die worden ontworpen om inhoud van de plaats het dichtst aan uw gebruikers in het voorgeheugen onder te brengen en te dienen. Dit vermindert netwerkhop en afstand van de computer van de gebruiker aan uw inhoud, daardoor verminderend "Rond Trip Tijd" (RTT) . RTT is de tijd die de browser nodig heeft om een aanvraag naar uw site te verzenden en een antwoord te ontvangen. De concurrentie in CDN leveranciersruimte heeft CDNs zeer rendabel gemaakt. Hierdoor is het eenvoudig om een CDN voor uw site te gebruiken. als u nog geen CDN gebruikt, dan zou u zeker een CDN in uw plaats moeten opnemen.
Er zijn vele leveranciers CDN, elk biedt verschillende eigenschappen en configuraties aan.
hoe werkt CDN Caching?
CDN's plaatsen inhoud in cache volgens regels die vergelijkbaar zijn met browsers. Zij baseren zich op cache-controle HTTP reactie kopbal en vallen over het algemeen terug naar verloopt kopbal als geen cache-controle kopbal wordt gevonden.
De meeste CDN's bieden een manier om het cachegeheugen handmatig te leegmaken. In veel gevallen, hebben de geheim voorgeheugenflushes wat vertraging (b.v. 15 minuten) met betrekking tot het verspreiden aan alle randservers die uw dossiers hebben.
Optimizing CDN Gebruik
Er zijn een paar dingen om ervoor te zorgen u dossiers optimaal in het voorgeheugen onderbrengt in CDN:
-
Gebruik CDN die stale-terwijl-revalidate en stale-als-fout richtlijnen in de geheime voorgeheugen-controle kopbal steunt.
- schaal-terwijl-revalidate - deze richtlijn vertelt CDN om de oude (reeds caching) versie van het dossier te dienen terwijl het nieuwe terugwint nadat het geheim voorgeheugendossier is verlopen.
- schaal-als-fout - zo ook, vertelt deze richtlijn CDN om de oude (reeds caching) versie van het dossier te dienen wanneer de oorsprong met een fout tijdens herbevestiging antwoordt.
-
GZip-comprimeringsreacties voor alle bestandstypen die niet vooraf zijn gecomprimeerd.
Dit moet u doen op het niveau van de verzender. Dit zal ervoor zorgen dat u het aantal bytes vermindert die naar CDN worden verzonden. CDN's worden doorgaans opgeladen door bytes die worden overgedragen, zodat compressiereacties de kosten verlagen.
-
Laat GZip compressie op het niveau van Dispatcher toe: Apache - gebruik mod_deflate . Wees voorzichtig met het gebruik van de variabele door mod_deflate. In bepaalde gevallen kan de header Variëren ertoe leiden dat de CDN en de browser het cachegeheugen volledig overslaan.
-
Microsoft IIS - gebruik Dynamische Compressie .
-
Gzip-compressie van grote bestanden of bestanden die al zijn gecomprimeerd, niet toestaan. De meeste afbeeldings- en video-indelingen zijn al vooraf gecomprimeerd. Comprimeren van deze bestanden op het niveau van de webserver kost veel prestatievermogen.
- Op Apache kan dit via de AddOutputFilterByType-instructie: AddOutputFilterByType DEFLATE-tekst/html text/plain text/xml text/css text/javascript application/javascript
- Op IIS, kan dit via de
<dynamicTypes>configuratie worden gecontroleerd.
-
Als uw leverancier CDN Edge-kant omvat (ESI) dan hefboomwerking deze eigenschap. AEM-componenten kunnen worden opgesplitst met behulp van ESI. Om dit te doen, gebruik Apache
\[Sling Dynamic Includes\] of voer een douaneoplossing uit. Het is handig als u tamelijk statische pagina's hebt, maar in een paar delen van de pagina een veel dynamischer inhoud aanbiedt. In deze gevallen verbreekt u de pagina in feite in meerdere CDN-bestanden. Op deze manier kunt u verschillende delen van de pagina gedurende verschillende perioden in het cachegeheugen plaatsen.
-
Populaire Leveranciers CDN
Hier is een lijst van enkele populaire CDN-providers:
- Microsoft Azure CDN
- Amazon Cloudfront
- Akamai
- Google Cloud CDN
- Rackspace CDN
- Stackpath CDN (voorheen bekend als Max CDN)
- Cloudflare
- Fastly
- F5 Netwerken CDN
Er zijn nog meer, elk met verschillende functies.
Voorzichtigheid:
Wees voorzichtig voor de Veranderlijke reactiekop. In bepaalde gevallen, Varig kan zowel CDN als browser veroorzaken om caching volledig over te slaan. Als algemene regel van duim, vermijd toevoegend Varig behalve Varig: Accept-Codering (toegepast slechts wanneer de reactie wordt samengeperst gzip). Met andere woorden, als u de uitvoer van een reactie moet "variëren", gebruikt u een andere URL.
Als u bijvoorbeeld een andere versie van de HTML for mobile hebt dan een desktopversie, gebruikt u een andere URL. Hierdoor kunnen CDN's en browsers effectiever cache opslaan.
C. AEM Dispatcher Caching
Als de CDN-cache is verlopen, bereikt de aanvraag de cache van de AEM-verzender. Op dit niveau zijn er veel dingen die kunnen worden gedaan om caching te optimaliseren. Voor stappen, verwijs naar hoe te om het geheime voorgeheugen van Dispatcher te optimaliseren?
D. AEM-publicatie-instanties
Op AEM-niveau zijn er een aantal dingen die moeten worden gedaan om de verschillende cachelagen te optimaliseren:
-
Stel de volgende HTTP-antwoordheaders in die niet standaard door AEM worden ingesteld.
- geheime voorgeheugen-controle: max-age=… - om deze kopbal te plaatsen, ACSCommons - Dispatcher TTL kon worden gebruikt, of u kon douanecode uitvoeren om het te plaatsen.
- last-Gewijzigd - als de paginacontent relatief statisch zoals een artikel is dan kon u zijn laatste-gewijzigde kopbal aan cq :lastModified datum/tijd (laatste tijd het artikel werd gewijzigd) plaatsen. Als de pagina echter dynamisch is en de JCR-queryresultaten in de inhoud van de component zijn opgenomen, kunt u deze het beste instellen op de huidige datum/tijd.
- ETag - als u besluit om dit in plaats van te gebruiken last-Gewijzigd , kon u a ReplicationEventListener schrijven die op paginaaactivering luistert en een md5 knoeiboel van de paginacontent produceert. Dit zou als bezit op jcr :content knoop van de pagina op de auteursinstantie kunnen worden geplaatst. Wanneer pagina's worden gerepliceerd, wordt deze naar de publicatie-instanties verzonden. Voor paginacomponenten met inhoud die vrij statisch is, zou dit goed kunnen werken, echter als de pagina enigszins dynamisch is of verwijzingen een partijinhoud dan zou ETag moeten worden weggelaten (of worden berekend).
-
Als de site gepersonaliseerde/dynamische inhoud bevat:
-
Het gebruik Dynamische Omvat van de Sling van Apache om de inhoud te verdelen zodat de verschillende delen van de pagina voor verschillende periodes in het voorgeheugen kunnen worden opgenomen.
-
Het in cache plaatsen kan worden uitgevoerd met de volgende technologieën:
- Edge-side inclusief (ESI) op de CDN
- Server-side Includes (SSI) op de webserver
- Asynchrone JavaScript en XML (AJAX) in de browser
-
Componenten op de pagina kunnen worden opgedeeld in afzonderlijke aanvragen die gedurende verschillende perioden in de cache kunnen worden opgeslagen. Delen van de pagina die relatief statisch zijn, kunnen gedurende veel langere perioden in het cachegeheugen worden opgeslagen.
-
-
Overweeg het gebruiken van de eigenschap van het Geheime voorgeheugen van HTTP van ACS Commons .
-
-
Client libraries optimaliseren.
-
Minificatie op clientbibliotheken inschakelen.
-
Als bestanden in de clientbibliotheek vooraf zijn geminiateerd, schakelt u minificatie in die clientbibliotheek uit. Het cq :ClientLibraryFolder -knooppunt bewerken:
- Plaats bezit jsProcessor van typeKoord
[]met waarde min :none - en eigenschap cssProcessor van het type String
[]instellen met value min :none - Zie meer details, hier .
- Plaats bezit jsProcessor van typeKoord
-
bedt cliëntbibliotheken in om js en css dossiers te minimaliseren en te verminderen.
-
Voer versioned-clientlibs van ACS Commons uit om CDN en Dispatcher toe te staan om js en css- dossiers voor langere periodes in cache te plaatsen.
-