Adobe Experience Manager
L’ottimizzazione della memorizzazione nella cache all’interno dell’architettura AEM è uno dei modi più rapidi per ottenere un notevole miglioramento delle prestazioni. Questo articolo si concentra su come ottimizzare le varie cache disponibili all’interno di un’architettura AEM.
Architettura e caching di AEM
In tutte le architetture AEM, l’utente incontra più livelli di cache quando visita il sito. Ci sono 4 livelli di cache da considerare in un’architettura AEM standard. Sono incluse le istanze Browser web, CDN, Dispatcher e AEM.
Memorizzazione in cache del browser
Il primo livello di cache che un utente incontra durante una visita ripetuta del sito è il proprio browser. La memorizzazione in cache a livello di browser viene solitamente eseguita tramite Cache-Control: max-age=… risposta intestazione. Il età massima L'impostazione indica al browser per quanti secondi deve memorizzare in cache il file prima di tentare di "riconvalidarlo" o richiederlo nuovamente al sito. Questo concetto di cache età massima viene comunemente indicato come "Scadenza cache" o TTL ("Time to Live", durata della cache).
Ci sono varie opzioni (o "direttive") all'interno del Cache-Control che influenzano la modalità di memorizzazione in cache. Di seguito sono riportate alcune direttive comuni:
privato - il privato direttiva nel Cache-Control viene creata in modo che il file venga memorizzato solo nella cache del browser, non in cache intermedie come le CDN. Questa direttiva potrebbe essere utile se la pagina include contenuti personalizzati o specifici per l’utente.
Esempio di utilizzo:
Cache-Control: max-age=300, private
s-maxage - il s-maxage direttiva nel Cache-Control L’intestazione ti consente di impostare un TTL diverso per le cache condivise, come le CDN. Quando questo valore è impostato, il browser utilizza ciò che è impostato in età massima e altre cache rispetterebbero s-maxage al suo posto.
Esempio di utilizzo:
Cache-Control: max-age=600, s-maxage=300
I browser moderni supportano tutti Cache-Control Tuttavia, da HTTP/1.0 sono presenti alcune vecchie intestazioni obsolete che potrebbero ancora avere un effetto sul caching. Queste intestazioni sono Scade e Pragma. Se non devi supportare browser molto vecchi, non inviare tali intestazioni di risposta.
Oltre alla memorizzazione nella cache, anche la riconvalida è un concetto importante. La riconvalida si basa su Ultima modifica (risposta) / If-Modified-Since (richiesta) e ETag (risposta) / If-None-Match (richiesta) intestazioni.
Attenzione sul test del browser:
Durante il test del caching in Google Chrome, se esegui un test su https e disponi di un certificato autofirmato, non verrà memorizzato nulla nella cache. Chrome non memorizza nella cache le risposte né esegue la riconvalida in presenza di un certificato non attendibile o non valido.
Nota sul dispatcher:
Si è verificato un problema con AEM Dispatcher v4.2.3 e versioni precedenti in cui il /enableTTL solo cache che utilizzano età massima direttiva. Ciò significa che anche quando privato o s-maxage vengono impostate delle direttive, ma la cache viene comunque eseguita se età massima è impostato. Questo problema è stato risolto in Dispatcher 4.2.4 e versioni successive.
Memorizzazione in cache CDN
A CDN o "Content Delivery Network", è una rete distribuita di server web progettati per memorizzare in cache e distribuire i contenuti dalla posizione più vicina agli utenti. In questo modo si riducono i passaggi di rete e la distanza tra il computer dell'utente e il contenuto, riducendo in tal modo "Round Trip Time" (RTT). RTT è il tempo necessario al browser per inviare una richiesta al sito e ricevere una risposta. La concorrenza nello spazio del provider CDN ha reso le CDN molto convenienti. In questo modo la decisione di utilizzare una rete CDN per il sito diventa semplice. Se non utilizzi ancora una CDN, devi sicuramente incorporare una CDN nel sito.
Ci sono molti provider CDN, ciascuno dei quali offre diverse funzioni e configurazioni.
Come funziona il caching della rete CDN?
Le CDN memorizzano in cache il contenuto seguendo regole simili a quelle dei browser. Si basano sulla Cache-Control HTTP risposta e in genere torna all’intestazione Scade intestazione se no Cache-Control intestazione trovata.
La maggior parte delle reti CDN fornisce un modo per attivare lo scaricamento manuale della cache. In molti casi, gli svuotamenti della cache hanno un certo ritardo (ad esempio 15 minuti) nella propagazione a tutti i server perimetrali che hanno i tuoi file.
Ottimizzazione dell’utilizzo della CDN
Esistono alcune operazioni per assicurarti di memorizzare i file nella cache in modo ottimale nella rete CDN:
Utilizza una rete CDN che supporta stale-while-revalidate e stale-if-error direttive in Cache-Control intestazione.
Risposte di compressione GZip per tutti i tipi di file non precompressi.
Dovresti eseguire questa operazione a livello di Dispatcher. In questo modo sarà possibile ridurre il numero di byte inviati alla rete CDN. Le reti CDN vengono solitamente caricate in base ai byte trasferiti, pertanto la compressione delle risposte riduce i costi.
Abilitare la compressione GZip a livello di Dispatcher: Apache - use mod_deflate. Prestare attenzione all'uso di mod_deflate della variabile. In alcuni casi, l’intestazione Vary può causare il totale salto del caching della rete CDN e del browser.
Microsoft IIS - utilizzare Compressione dinamica.
Non consentire la compressione Gzip di file di grandi dimensioni o già compressi. La maggior parte dei formati immagine e video è già precompressa. Comprimerli al volo a livello di server web comporta un costo molto elevato in termini di prestazioni.
Su Apache, è possibile eseguire questa operazione tramite la direttiva AddOutputFilterByType:
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
In IIS, questo può essere controllato tramite <
dynamicTypes>
configurazione.
Se il provider CDN supporta Inclusioni lato bordo (ESI) quindi sfruttare questa funzione. I componenti AEM possono essere suddivisi utilizzando ESI. Per eseguire l’operazione, utilizza Apache [
Inclusioni dinamiche Sling]
(https://github.com/Cognifide/Sling-Dynamic-Include) o implementa una soluzione personalizzata. È utile quando si dispone di pagine piuttosto statiche, ma si sta distribuendo contenuto più dinamico in alcune parti della pagina. In questi casi, si sta essenzialmente suddividendo la pagina in più file CDN. In questo modo puoi memorizzare in cache diverse parti della pagina per diversi periodi di tempo.
Provider CDN popolari
Ecco un elenco di alcuni provider CDN popolari:
Ce ne sono molti altri, ciascuno con caratteristiche diverse.
Attenzione:
Presta attenzione alla Variabile intestazione di risposta. In alcuni casi, Variabile può fare in modo che la CDN e il browser saltino completamente la memorizzazione in cache. Come regola empirica generale, evita di aggiungere Variabile eccetto per Variabile: Accept-Encoding (applicato solo quando la risposta è compressa con gzip). In altre parole, se devi "variare" l’output di una risposta, utilizza un URL diverso.
Ad esempio, se disponi di una versione diversa del HTML per dispositivi mobili rispetto a desktop, utilizza un URL diverso. In questo modo le CDN e i browser potranno memorizzare in cache in modo più efficace.
Memorizzazione in cache di AEM Dispatcher
Se la cache CDN è scaduta, la richiesta raggiungerà la cache del dispatcher AEM. A questo livello, ci sono molte operazioni possibili da eseguire per ottimizzare la memorizzazione in cache.
Poiché si tratta di un argomento più ampio, vedere questo articolo per informazioni dettagliate su come ottimizzare la cache del dispatcher.
Istanze di pubblicazione AEM
A livello di AEM, ci sono alcune operazioni da eseguire per ottimizzare i vari livelli di cache:
Imposta le seguenti intestazioni di risposta HTTP che non sono impostate dall’AEM per impostazione predefinita.
Se il sito dispone di contenuti personalizzati/dinamici:
Utilizzare Apache Sling Dynamic Include suddividere il contenuto in modo che parti diverse della pagina possano essere memorizzate nella cache per periodi di tempo diversi.
Il caching può essere eseguito con le seguenti tecnologie:
I componenti della pagina possono essere suddivisi in richieste separate che possono essere memorizzate nella cache per diversi periodi di tempo. Parti della pagina che sono relativamente statiche potrebbero essere memorizzate nella cache per periodi di tempo molto più lunghi.
Valuta l’utilizzo di Funzione cache HTTP di ACS Commons.
Ottimizzare le librerie client.
Abilita minimizzazione nelle librerie client.
Se i file nella libreria client sono preminimizzati, disabilita la minimizzazione in tale libreria client. Modifica il nodo cq:ClientLibraryFolder:
[
]
con valore min:nessuno[
]
con valore min:nessunoClient di incorporamento librerie per minimizzare e ridurre i file js e css.
Implementare librerie client con versione da ACS Commons per consentire alla CDN e al Dispatcher di memorizzare in cache i file js e css per periodi di tempo più lunghi.