Inleiding intro
Het verkeer gaat door CDN tot een Apache laag van de Webserver over, die modules met inbegrip van Dispatcher steunt. Om de prestaties te verbeteren, wordt Dispatcher vooral gebruikt als cache om de verwerking op de publicatieknooppunten te beperken.
De regels kunnen op de configuratie van de Ontvanger worden toegepast om het even welke montages van de standaardgeheim voorgeheugenvervalsing te wijzigen, resulterend in caching bij CDN. Dispatcher respecteert ook de resulterende headers voor het verlopen van de cache als enableTTL
wordt toegelaten in de configuratie van de Verzender, die impliceert dat het specifieke inhoud zelfs buiten inhoud vernieuwt die opnieuw wordt gepubliceerd.
Op deze pagina wordt ook beschreven hoe de Dispatcher-cache ongeldig wordt gemaakt en hoe caching werkt op browserniveau met betrekking tot client-side bibliotheken.
Caching caching
HTML/Tekst html-text
- standaard gedurende vijf minuten in cache geplaatst op basis van de
cache-control
door de Apache-laag uitgestoten header. De CDN neemt deze waarde ook in acht. - de standaardinstelling voor het in cache plaatsen van HTML of tekst kan worden uitgeschakeld door de instelling
DISABLE_DEFAULT_CACHING
variabele inglobal.vars
:
Define DISABLE_DEFAULT_CACHING
Deze methode is bijvoorbeeld handig wanneer uw bedrijfslogica een nauwkeurige afstemming van de paginakoptekst vereist (met een waarde die op kalenderdag is gebaseerd), omdat de paginakoptekst standaard op 0 is ingesteld. Dat gezegd hebbende, Wees voorzichtig bij het uitschakelen van standaardcaching.
-
kan worden overschreven voor alle HTML-/tekstinhoud door het definiëren van de
EXPIRATION_TIME
variabele inglobal.vars
met de AEM as a Cloud Service SDK Dispatcher-gereedschappen. -
kan worden overschreven op een fijner korrelig niveau, inclusief het onafhankelijk beheren van de CDN en de browsercache, met de volgende Apache
mod_headers
richtlijnen:code language-none <LocationMatch "^/content/.*\.(html)$"> Header set Cache-Control "max-age=200" Header set Surrogate-Control "max-age=3600" Header set Age 0 </LocationMatch>
note note NOTE De header Surrogate-Control is van toepassing op de Adobe beheerde CDN. Als u een door de klant beheerde CDN, kan een verschillende kopbal afhankelijk van uw leverancier CDN worden vereist. Wees voorzichtig bij het instellen van algemene cachebeheerkoppen of vergelijkbare cachekoppen die overeenkomen met een brede regex, zodat deze niet worden toegepast op inhoud die u privé moet houden. Overweeg meerdere richtlijnen te gebruiken om ervoor te zorgen dat regels op een fijnkorrelige manier worden toegepast. Met dit gezegd, verwijdert AEM as a Cloud Service de geheim voorgeheugenkopbal als het ontdekt dat het is toegepast op wat het ontdekt om door Dispatcher oncacheable te zijn, zoals die in de documentatie van de Verzender wordt beschreven. Als u AEM wilt dwingen om altijd de in cache plaatsen koppen toe te passen, kunt u de opdracht
always
optie als volgt:code language-none <LocationMatch "^/content/.*\.(html)$"> Header unset Cache-Control Header unset Expires Header always set Cache-Control "max-age=200" Header set Age 0 </LocationMatch>
Zorg ervoor dat een bestand onder
src/conf.dispatcher.d/cache
heeft de volgende regel (die in de standaardconfiguratie is):code language-none /0000 { /glob "*" /type "allow" }
-
Om te voorkomen dat specifieke inhoud in cache wordt geplaatst bij de CDN, stelt u de header Cache-control in op privé. Het volgende voorkomt bijvoorbeeld HTML-inhoud onder een map met de naam beveiligen van in cache worden geplaatst bij de CDN:
code language-none <LocationMatch "/content/secure/.*\.(html)$">. // replace with the right regex Header unset Cache-Control Header unset Expires Header always set Cache-Control "private" </LocationMatch>
-
Terwijl HTML-inhoud die is ingesteld op Private niet in de cache van de CDN wordt opgeslagen, kan deze inhoud in de cache van Dispatcher worden geplaatst als Machtigingsgevoelige caching is geconfigureerd, zodat alleen geautoriseerde gebruikers de inhoud kunnen ontvangen.
note note NOTE De andere methoden, waaronder de Dispatcher-ttl AEM ACS Commons-project, worden waarden niet genegeerd. note note NOTE De Dispatcher plaatst de inhoud mogelijk nog steeds in de cache volgens zijn eigen caching-regels. Als u de inhoud echt privé wilt maken, moet u ervoor zorgen dat deze niet in de cache wordt opgeslagen door Dispatcher.
Client-Side bibliotheken (js,css) client-side-libraries
- Wanneer u AEM clientbibliotheekframework gebruikt, worden JavaScript- en CSS-code zodanig gegenereerd dat browsers deze oneindig in cache kunnen plaatsen, aangezien elke wijziging zich voordoet als nieuwe bestanden met een uniek pad. Met andere woorden, HTML dat verwijzingen de cliëntbibliotheken worden geproduceerd zoals nodig zodat de klanten nieuwe inhoud kunnen ervaren aangezien het wordt gepubliceerd. Het cache-control wordt ingesteld op 'onveranderlijk' of op 30 dagen voor oudere browsers die de waarde 'onveranderlijk' niet respecteren.
- zie de sectie Bibliotheken aan de clientzijde en consistentie van versies voor meer informatie.
Afbeeldingen en inhoud die groot genoeg is om in blokopslag te worden opgeslagen images
Het standaardgedrag voor programma's die na medio mei 2022 worden gemaakt (met name voor programma-id's van meer dan 65000), is standaard in cache plaatsen, terwijl ook de verificatiecontext van het verzoek wordt gerespecteerd. Oudere programma's (programma-id's van 65000 of lager) plaatsen standaard geen blob-inhoud in de cache.
In beide gevallen kunnen de in cache plaatsen koppen op een fijner korrelig niveau op de laag Apache/Dispatcher worden overschreven met behulp van de Apache mod_headers
richtlijnen , bijvoorbeeld :
<LocationMatch "^/content/.*\.(jpeg|jpg)$">
Header set Cache-Control "max-age=222"
Header set Age 0
</LocationMatch>
Wanneer het wijzigen van de caching kopballen bij de laag van de Verzender, ben voorzichtig om niet te wijd in het voorgeheugen onder te brengen. Zie de discussie in de sectie HTML/tekst boven. Zorg er ook voor dat elementen die bedoeld zijn om privé te blijven (in plaats van in cache te worden geplaatst), geen deel uitmaken van de LocationMatch
richtingsfilters.
De middelen JCR (groter dan 16KB) die in blob opslag worden opgeslagen worden typisch gediend als 302 omleidingen door AEM. Deze omleidingen worden onderschept en door CDN gevolgd en de inhoud wordt direct geleverd van de blob opslag. Op deze reacties kan slechts een beperkte set kopteksten worden aangepast. Bijvoorbeeld om Content-Disposition
U moet de verzendinstructies als volgt gebruiken:
<LocationMatch "\.(?i:pdf)$">
ForceType application/pdf
Header set Content-Disposition inline
</LocationMatch>
De lijst van kopballen die op blob reacties kunnen worden aangepast zijn:
content-security-policy
x-frame-options
x-xss-protection
x-content-type-options
x-robots-tag
access-control-allow-origin
content-disposition
permissions-policy
referrer-policy
x-vhost
content-disposition
cache-control
vary
Nieuw standaardgedrag in cache new-caching-behavior
De AEM laag plaatst geheim voorgeheugenkopballen afhankelijk van of de geheim voorgeheugenkopbal reeds is geplaatst en de waarde van het verzoektype. Als geen kopbal van de geheim voorgeheugencontrole wordt geplaatst, wordt de openbare inhoud caching, en voor authentiek verklaard verkeer geplaatst aan privé. Als een kopbal van de geheim voorgeheugencontrole wordt geplaatst, worden de geheim voorgeheugenkopballen verlaten onveranderd.
Hoewel niet aanbevolen, is het mogelijk om het nieuwe standaardgedrag te wijzigen om het oude gedrag te volgen (programma-id's gelijk aan of lager dan 65000) door de omgevingsvariabele van Cloud Manager in te stellen AEM_BLOB_ENABLE_CACHING_HEADERS
naar false.
Oudere standaardcaching, gedrag old-caching-behavior
In de AEM-laag wordt blob-inhoud niet standaard in de cache opgeslagen.
Nu kunnen afbeeldingen in blob-opslag die als private zijn gemarkeerd, niet in de cache worden geplaatst met Machtigingsgevoelige caching. De afbeelding wordt altijd opgevraagd bij de AEM oorsprong en wordt weergegeven als de gebruiker geautoriseerd is.
Andere inhoudstypen in nodenarchief other-content
- geen standaardcaching
- standaard kan niet worden ingesteld met de
EXPIRATION_TIME
variabele die wordt gebruikt voor html/text-bestandstypen - cache-vervaldatum kan worden ingesteld met dezelfde LocationMatch-strategie die in de html/text-sectie wordt beschreven door de juiste regex op te geven
Verdere optimalisaties further-optimizations
-
Vermijd gebruik
User-Agent
als onderdeel van deVary
header. Oudere versies van de standaardinstallatie van Dispatcher (vóór archetype versie 28) bevatten deze en de Adobe raadt u aan deze versie te verwijderen door de onderstaande stappen uit te voeren.- Zoek de hostbestanden in
<Project Root>/dispatcher/src/conf.d/available_vhosts/*.vhost
- Verwijder of verwijder de regel:
Header append Vary User-Agent env=!dont-vary
van alle hostbestanden, behalve default.vhost, dat alleen-lezen is
- Zoek de hostbestanden in
-
Gebruik de
Surrogate-Control
header om CDN in cache te plaatsen onafhankelijk van browser caching -
Overweeg het toepassen
stale-while-revalidate
enstale-if-error
richtlijnen waarmee u op de achtergrond kunt vernieuwen en cachefouten kunt voorkomen, zodat uw inhoud snel en vers blijft voor gebruikers.- Er zijn vele manieren om deze richtlijnen toe te passen, maar het toevoegen van een minuut
stale-while-revalidate
aan alle kopballen van de geheim voorgeheugencontrole is een goed uitgangspunt.
- Er zijn vele manieren om deze richtlijnen toe te passen, maar het toevoegen van een minuut
-
Hier volgen enkele voorbeelden voor verschillende inhoudstypen, die u kunt gebruiken als richtlijn bij het instellen van uw eigen regels voor het in cache plaatsen. Overweeg en test zorgvuldig uw specifieke instellingen en vereisten:
-
Mogelijke clientbibliotheekbronnen gedurende 12 uur in cache opslaan en de achtergrond na 12 uur vernieuwen.
code language-none <LocationMatch "^/etc\.clientlibs/.*\.(?i:json|png|gif|webp|jpe?g|svg)$"> Header set Cache-Control "max-age=43200,stale-while-revalidate=43200,stale-if-error=43200,public" "expr=%{REQUEST_STATUS} < 400" Header set Age 0 </LocationMatch>
-
De onveranderlijke middelen van de cliëntbibliotheek van het geheime voorgeheugen op lange termijn (30 dagen) met achtergrond verfrist zich om MISS te vermijden.
code language-none <LocationMatch "^/etc\.clientlibs/.*\.(?i:js|css|ttf|woff2)$"> Header set Cache-Control "max-age=2592000,stale-while-revalidate=43200,stale-if-error=43200,public,immutable" "expr=%{REQUEST_STATUS} < 400" Header set Age 0 </LocationMatch>
-
Plaats HTML-pagina's gedurende vijf minuten in de cache, waarbij de achtergrond één uur in de browser en 12 uur in de CDN vernieuwt. De cache-Control headers worden altijd toegevoegd, dus het is belangrijk om ervoor te zorgen dat overeenkomende HTML-pagina's onder /content/* openbaar moeten zijn. Als niet, overweeg het gebruiken van een specifiekere regex.
code language-none <LocationMatch "^/content/.*\.html$"> Header unset Cache-Control Header always set Cache-Control "max-age=300,stale-while-revalidate=3600" "expr=%{REQUEST_STATUS} < 400" Header always set Surrogate-Control "stale-while-revalidate=43200,stale-if-error=43200" "expr=%{REQUEST_STATUS} < 400" Header set Age 0 </LocationMatch>
-
De diensten van de inhoud van het geheime voorgeheugen/Sling model exporter json reacties voor vijf minuten met achtergrond verfrissen zich één uur op browser en 12 uren op CDN.
code language-none <LocationMatch "^/content/.*\.model\.json$"> Header set Cache-Control "max-age=300,stale-while-revalidate=3600" "expr=%{REQUEST_STATUS} < 400" Header set Surrogate-Control "stale-while-revalidate=43200,stale-if-error=43200" "expr=%{REQUEST_STATUS} < 400" Header set Age 0 </LocationMatch>
-
Plaats onveranderlijke URL's van de centrale afbeeldingscomponent in de cache op lange termijn (30 dagen) en vernieuw de achtergrond om MISS te voorkomen.
code language-none <LocationMatch "^/content/.*\.coreimg.*\.(?i:jpe?g|png|gif|svg)$"> Header set Cache-Control "max-age=2592000,stale-while-revalidate=43200,stale-if-error=43200,public,immutable" "expr=%{REQUEST_STATUS} < 400" Header set Age 0 </LocationMatch>
-
Mutabele bronnen van de DAM in cache plaatsen, zoals afbeeldingen en video, gedurende 24 uur en de achtergrond vernieuwen na 12 uur om MISS te voorkomen.
code language-none <LocationMatch "^/content/dam/.*\.(?i:jpe?g|gif|js|mov|mp4|png|svg|txt|zip|ico|webp|pdf)$"> Header set Cache-Control "max-age=43200,stale-while-revalidate=43200,stale-if-error=43200" "expr=%{REQUEST_STATUS} < 400" Header set Age 0 </LocationMatch>
-
Hit-verhouding CDN-cache analyseren analyze-chr
Zie de analysezelfstudie cacheverhouding voor informatie over het downloaden van CDN-logboeken en het analyseren van de bitratio van de cache van uw site, via een dashboard.
HEAD-aanvraaggedrag request-behavior
Wanneer een verzoek van HEAD bij de Adobe CDN voor een middel wordt ontvangen dat niet in de cache wordt het verzoek getransformeerd en door de instantie Dispatcher en/of AEM ontvangen als een GET-verzoek. Als de reactie cacheable is, dan worden de verdere verzoeken van HEAD van CDN gediend. Als de reactie niet cacheable is, dan worden de verdere verzoeken van HEAD overgegaan tot de Dispatcher, of AEM instantie, of allebei, voor een tijd die van Cache-Control
TTL.
Parameters van de marketingcampagne marketing-parameters
URL's van websites bevatten vaak parameters voor marketingcampagnes die worden gebruikt om het succes van een campagne te volgen.
Voor milieu's die in Oktober 2023 of recenter worden gecreeerd, aan betere geheim voorgeheugenverzoeken, zal CDN gemeenschappelijke marketing verwante vraagparameters, specifiek die verwijderen die het volgende regex patroon aanpassen:
^(utm_.*|gclid|gdftrk|_ga|mc_.*|trk_.*|dm_i|_ke|sc_.*|fbclid)$
Verzend een ondersteuningsticket als u dit gedrag wilt uitschakelen.
Voor milieu's die vóór Oktober 2023 worden gecreeerd, wordt het geadviseerd om de configuratie van de Dispatcher te vormen ignoreUrlParams
eigenschap as hier gedocumenteerd.
Er zijn twee mogelijkheden om marketingparameters te negeren. (Waar de eerste voorkeur cachebusting via queryparameters negeert):
- Negeer alle parameters en sta selectief parameters toe die worden gebruikt.
Alleen in het volgende voorbeeldpage
enproduct
parameters worden niet genegeerd en de aanvragen worden doorgestuurd naar de uitgever.
/ignoreUrlParams {
/0001 { /glob "*" /type "allow" }
/0002 { /glob "page" /type "deny" }
/0003 { /glob "product" /type "deny" }
}
- Alle parameters behalve de marketingparameters toestaan. Het bestand marketing_query_parameters.any definieert een lijst met veelgebruikte marketingparameters die worden genegeerd. Adobe werkt dit bestand niet bij. Deze kan door gebruikers afhankelijk van hun marketingproviders worden uitgebreid.
/ignoreUrlParams {
/0001 { /glob "*" /type "deny" }
$include "../cache/marketing_query_parameters.any"
}
Ongeldige validatie van cache-verzending disp
Over het algemeen is het niet nodig om de Dispatcher-cache ongeldig te maken. In plaats daarvan moet u erop vertrouwen dat de Dispatcher de cache vernieuwt wanneer de inhoud opnieuw wordt gepubliceerd en de CDN de headers voor het verlopen van de cache respecteert.
Validatie van cache van Dispatcher tijdens activering/deactivering cache-activation-deactivation
Net als bij eerdere versies van AEM worden bij het publiceren of verwijderen van pagina's de inhoud uit de Dispatcher-cache gewist. Als een cacheprobleem wordt vermoed, moet u de pagina's in kwestie opnieuw publiceren en ervoor zorgen dat er een virtuele host beschikbaar is die overeenkomt met de ServerAlias
localhost, wat vereist is voor de ongeldigverklaring van de Dispatcher-cache.
Wanneer de publicatieinstantie een nieuwe versie van een pagina of element van de auteur ontvangt, gebruikt deze de agent flush om de juiste paden op de Dispatcher ongeldig te maken. Het bijgewerkte pad wordt samen met de bovenliggende elementen uit de Dispatcher-cache verwijderd tot een niveau (u kunt dit niveau configureren met de statfileslevel).
Expliciete ongeldigmaking van de Dispatcher-cache explicit-invalidation
Adobe raadt aan dat u de levenscyclus van de levering van inhoud beheert met behulp van standaard cacheheaders. Indien nodig is het echter mogelijk inhoud rechtstreeks in Dispatcher ongeldig te maken.
De volgende lijst bevat scenario's waar u uitdrukkelijk het geheime voorgeheugen zou kunnen willen invalideren (terwijl naar keuze het luisteren naar de voltooiing van de ongeldigverklaring):
- Na het publiceren van inhoud zoals ervaringsfragmenten of inhoudsfragmenten, het ongeldig maken van gepubliceerde en in de cache opgeslagen inhoud die naar die elementen verwijst.
- Een extern systeem waarschuwen wanneer pagina's waarnaar wordt verwezen, zijn ongeldig gemaakt.
Er zijn twee benaderingen om het geheime voorgeheugen uitdrukkelijk ongeldig te maken:
- De voorkeursbenadering is het gebruik van de Sling Content Distribution (SCD) van de auteur.
- De andere benadering is de Replicatie API te gebruiken om publiceer Dispatcher te roepen flush replicatieagent.
De benaderingen verschillen in termen van laagbeschikbaarheid, de capaciteit om gebeurtenissen en gebeurtenisverwerkingsgarantie te dedupliceren. De onderstaande tabel geeft een overzicht van de volgende opties:
De twee acties die rechtstreeks verband houden met cachevalidatie zijn Sling Content Distribution (SCD) API Invalidate and Replication API Deactivate.
Uit de tabel kunt u ook het volgende optekenen:
-
SCD API is nodig wanneer elke gebeurtenis moet worden gegarandeerd, bijvoorbeeld synchroniseren met een extern systeem dat nauwkeurige kennis vereist. Als er een publicatielaag upscaling-gebeurtenis is op het moment van de validatieaanroep, wordt een extra gebeurtenis weergegeven wanneer elke nieuwe publicatie de validatie verwerkt.
-
Het gebruik van de API voor replicatie is niet gebruikelijk, maar kan worden gebruikt in gevallen waarin de trigger voor het ongeldig maken van de cache afkomstig is uit de publicatielaag en niet uit de auteurslaag. Deze methode zou nuttig kunnen zijn als de Verzender TTL wordt gevormd.
Als u de Dispatcher-cache wilt invalideren, kunt u het beste de actie SCD API Invalidate van de auteur gebruiken. U kunt ook luisteren naar de gebeurtenis, zodat u vervolgens verdere downstreamacties kunt activeren.
Verdelen van inhoud (SCD) sling-distribution
Bij gebruik van de SCD-actie van Auteur ziet het implementatiepatroon er als volgt uit:
- Schrijf aangepaste code van Auteur om de distributie van de inhoud van de regel aan te roepen API, door de handeling voor ongeldig maken door te geven met een lijst met paden:
@Reference
private Distributor distributor;
ResourceResolver resolver = ...; // the resource resolver used for authorizing the request
String agentName = "publish"; // the name of the agent used to distribute the request
String pathToInvalidate = "/content/to/invalidate";
DistributionRequest distributionRequest = new SimpleDistributionRequest(DistributionRequestType.INVALIDATE, false, pathToInvalidate);
distributor.distribute(agentName, resolver, distributionRequest);
- (Optioneel) Luister naar een gebeurtenis die de bron weergeeft die ongeldig wordt gemaakt voor alle instanties Dispatcher:
package org.apache.sling.distribution.journal.shared;
import org.apache.sling.discovery.DiscoveryService;
import org.apache.sling.distribution.journal.impl.event.DistributionEvent;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.sling.distribution.DistributionRequestType.INVALIDATE;
import static org.apache.sling.distribution.event.DistributionEventProperties.DISTRIBUTION_PATHS;
import static org.apache.sling.distribution.event.DistributionEventProperties.DISTRIBUTION_TYPE;
import static org.apache.sling.distribution.event.DistributionEventTopics.AGENT_PACKAGE_DISTRIBUTED;
import static org.osgi.service.event.EventConstants.EVENT_TOPIC;
@Component(immediate = true, service = EventHandler.class, property = {
EVENT_TOPIC + "=" + AGENT_PACKAGE_DISTRIBUTED
})
public class InvalidatedHandler implements EventHandler {
private static final Logger LOG = LoggerFactory.getLogger(InvalidatedHandler.class);
@Reference
private DiscoveryService discoveryService;
@Override
public void handleEvent(Event event) {
String distributionType = (String) event.getProperty(DISTRIBUTION_TYPE);
if (INVALIDATE.name().equals(distributionType)) {
boolean isLeader = discoveryService.getTopology().getLocalInstance().isLeader();
// process the OSGi event on the leader author instance
if (isLeader) {
String[] paths = (String[]) event.getProperty(DISTRIBUTION_PATHS);
String packageId = (String) event.getProperty(DistributionEvent.PACKAGE_ID);
invalidated(paths, packageId);
}
}
}
private void invalidated(String[] paths, String packageId) {
// custom logic
LOG.info("Successfully applied package with id {}, paths {}", packageId, paths);
}
}
- (Optioneel) Voer bedrijfslogica uit in de
invalidated(String[] paths, String packageId)
hierboven.
Replicatie-API replication-api
Hieronder ziet u het implementatiepatroon bij gebruik van de API-deactivering voor replicatie:
- Voor publiceer rij, roep de Replicatie API om publiceer Dispatcher te teweegbrengen flush replicatieagent.
Het uitlijnende agenteneindpunt is niet configureerbaar maar eerder preconfigured om aan Dispatcher te richten, die met de publicatiedienst wordt aangepast die naast de uitlijningsagent loopt.
De spoelagent kan typisch door douanecode worden teweeggebracht die op gebeurtenissen OSGi of werkschema's wordt gebaseerd.
String[] paths = …
ReplicationOptions options = new ReplicationOptions();
options.setSynchronous(true);
options.setFilter( new AgentFilter {
public boolean isIncluded (Agent agent) {
return agent.getId().equals("flush");
}
});
Replicator.replicate (session,ReplicationActionType.DELETE,paths, options);
Client-Side bibliotheken en consistentie van versies content-consistency
Pagina's bestaan uit HTML, JavaScript, CSS en afbeeldingen. Klanten worden aangeraden de Client-Side Libraries (clientlibs)-framework om JavaScript- en CSS-bronnen te importeren in HTML-pagina's, rekening houdend met afhankelijkheden tussen JS-bibliotheken.
Het clientlibs-framework biedt automatisch versiebeheer. Dit houdt in dat ontwikkelaars wijzigingen in JS-bibliotheken in broncontrole kunnen inchecken en dat de nieuwste versie beschikbaar wordt gesteld wanneer een klant zijn release onder druk zet. Zonder deze workflow moeten ontwikkelaars HTML handmatig wijzigen met verwijzingen naar de nieuwe versie van de bibliotheek. Dit is vooral lastig als dezelfde bibliotheek veel HTML-sjablonen deelt.
Wanneer de nieuwe versies van bibliotheken worden vrijgegeven voor productie, worden de HTML-pagina's waarnaar wordt verwezen, bijgewerkt met nieuwe koppelingen naar die bijgewerkte bibliotheekversies. Nadat de browsercache voor een bepaalde HTML-pagina is verlopen, is er geen bezorgdheid dat de oude bibliotheken vanuit de browsercache worden geladen. De reden hiervoor is dat de vernieuwde pagina (van AEM) nu gegarandeerd verwijst naar de nieuwe versies van de bibliotheken. Een vernieuwde HTML-pagina bevat dus alle meest recente bibliotheekversies.
Het mechanisme achter deze mogelijkheid is een geserialiseerde hash, die aan de verbinding van de cliëntbibliotheek wordt toegevoegd. Hiermee wordt een unieke, versiegekoppelde URL voor de browser gegarandeerd die de CSS/JS in cache plaatst. De geserialiseerde hash wordt alleen bijgewerkt wanneer de inhoud van de clientbibliotheek wordt gewijzigd. Dit houdt in dat als er niet-gerelateerde updates optreden (dat wil zeggen dat er geen wijzigingen zijn aangebracht in de onderliggende css/js van de clientbibliotheek) zelfs met een nieuwe implementatie, de verwijzing ongewijzigd blijft. Hierdoor wordt de browsercache minder verstoord.
Longcache-versies van Client-Side Libraries inschakelen - AEM as a Cloud Service SDK QuickStart enabling-longcache
De standaard clientlib omvat op een pagina van HTML kijkt als het volgende voorbeeld:
<link rel="stylesheet" href="/etc.clientlibs/wkndapp/clientlibs/clientlib-base.css" type="text/css">
Wanneer strikte clientlib-versioning is ingeschakeld, wordt een lange-termijnhash-toets toegevoegd als kiezer aan de clientbibliotheek. Dientengevolge, ziet de cliëntlib verwijzing als dit:
<link rel="stylesheet" href="/etc.clientlibs/wkndapp/clientlibs/clientlib-base.lc-7c8c5d228445ff48ab49a8e3c865c562-lc.css" type="text/css">
Strikte clientlib-versioning wordt standaard ingeschakeld in alle AEM as a Cloud Service omgeving.
Ga als volgt te werk om strikte clientlib-versioning in te schakelen in de lokale SDK QuickStart:
-
Navigeer aan de Manager van de Configuratie OSGi
<host>/system/console/configMgr
-
Vind OSGi Config voor de Manager van de Bibliotheek van de HTML van de Adobe Granite:
- Schakel het selectievakje in, zodat u de strikte versie inschakelt
- In het veld met label Cachetoets op lange termijn clientzijde, voert u de waarde van / in.*;hash
-
Sla de wijzigingen op. Het is niet noodzakelijk om deze configuratie in broncontrole te bewaren aangezien AEM as a Cloud Service deze configuratie in dev, stadium, en productiemilieu's automatisch toelaat.
-
Telkens wanneer de inhoud van de clientbibliotheek wordt gewijzigd, wordt een nieuwe hash-toets gegenereerd en wordt de HTML-verwijzing bijgewerkt.