Abilita caching AEM Dispatcher

Consiglio

AEM Dispatcher è la cache di primo livello all'interno del servizio AEM, prima della cache CDN.

Ulteriori riferimenti

Consulta:

Utilizzare una rete per la distribuzione dei contenuti (CDN)

Consiglio

Le query GraphQL e le relative risposte JSON possono essere memorizzate nella cache se impostate come GET richieste quando si utilizza una rete CDN. Al contrario, le richieste non memorizzate nella cache possono essere molto (risorse) costose e lente da elaborare, con il potenziale di ulteriori effetti negativi sulle risorse dell’origine.

Ulteriori riferimenti

Consulta:

Impostare le intestazioni di controllo cache HTTP

Consiglio

Quando si utilizzano query GraphQL persistenti con una rete CDN, si consiglia di impostare intestazioni di controllo della cache HTTP appropriate.

Ogni query persistente può avere un proprio set specifico di intestazioni di controllo cache. Le intestazioni possono essere impostate su API GraphQL o IDE GraphiQL AEM.

Ulteriori riferimenti

Consulta:

Ottimizzazione query GraphQL

In un’istanza AEM con un numero elevato di frammenti di contenuto che condividono lo stesso modello, le query di elenco GraphQL possono diventare costose (in termini di risorse).

Questo perché devono essere caricati in memoria tutti i frammenti che condividono un modello utilizzato all’interno della query GraphQL. Ciò richiede tempo e memoria. Il filtro, che può ridurre il numero di elementi nel set di risultati (finale), può essere applicato solo dopo il caricamento dell’intero set di risultati in memoria.

Questo può dare l’impressione che anche piccoli set di risultati portino a cattive prestazioni. Tuttavia, in realtà la lentezza è causata dalle dimensioni del set di risultati iniziale, in quanto deve essere gestito internamente prima di poter applicare il filtro.

Per ridurre i problemi di prestazioni e memoria, il set di risultati iniziale deve essere ridotto il più possibile.

AEM consente due approcci per ottimizzare le query GraphQL:

Ogni approccio ha i propri casi d’uso e limitazioni. Questa sezione fornisce informazioni su Filtro e paginazione ibridi, insieme ad alcune delle best practice per l'ottimizzazione delle query GraphQL.

Utilizzare il filtro ibrido AEM GraphQL

Consiglio

Il filtro ibrido combina il filtro JCR con il filtro AEM.

Un filtro JCR viene applicato (sotto forma di vincolo di query) prima di caricare il set di risultati in memoria per il filtro AEM. In questo modo si riduce il set di risultati caricato in memoria, dato che il filtro JCR rimuove i risultati superflui precedenti.

NOTE
Per motivi tecnici (ad esempio flessibilità o nidificazione di frammenti), AEM non può delegare l’intera operazione di filtro a JCR.

Questa tecnica mantiene la flessibilità fornita dai filtri GraphQL, delegando la maggior parte del filtro possibile a JCR.

NOTE
Il filtro ibrido AEM richiede l’aggiornamento dei frammenti di contenuto esistenti

Ulteriori riferimenti

Consulta:

Usa paginazione GraphQL

Consiglio

Il tempo di risposta di query complesse, con set di risultati di grandi dimensioni, può essere migliorato segmentando le risposte in blocchi utilizzando l’impaginazione, uno standard di GraphQL.

GraphQL in AEM supporta due tipi di impaginazione:

  • paginazione basata su limite/offset
    Utilizzato per le query elenco; terminano con List; ad esempio, articleList.
    Per utilizzarlo, devi fornire la posizione del primo elemento da restituire (il offset) e il numero di elementi da restituire (il limit, o dimensioni della pagina).

  • paginazione basata su cursore (rappresentato da first e after)
    Fornisce un ID univoco per ciascun elemento, noto anche come cursore.
    Nella query, si specifica il cursore dell’ultimo elemento della pagina precedente, più le dimensioni della pagina (il numero massimo di elementi da restituire).

    Poiché l’impaginazione basata su cursore non si adatta alle strutture di dati delle query basate su elenco, AEM ha introdotto il tipo di query Paginated; ad esempio, articlePaginated. Le strutture di dati e i parametri utilizzati seguono i Specifica di connessione cursore GraphQL.

    NOTE
    AEM attualmente supporta il paging in avanti (utilizzando i parametri after/first).
    Il paging all’indietro (utilizzando before/last) non è supportato.

Ulteriori riferimenti

Consulta:

Usa ordinamento GraphQL

Consiglio

Inoltre, uno standard GraphQL, l’ordinamento consente ai client di ricevere contenuti JSON in ordine ordinato. Questo può ridurre la necessità di ulteriori elaborazioni sul client.

L’ordinamento può essere efficiente solo se tutti i criteri di ordinamento sono correlati ai frammenti di primo livello.

Se l’ordinamento include uno o più campi che si trovano su un frammento nidificato, tutti i frammenti che condividono il modello di livello principale devono essere caricati in memoria. Questo causa un impatto negativo sulle prestazioni.

NOTE
L’ordinamento sui campi di livello superiore ha anche un impatto sulle prestazioni, seppure ridotto.

Ulteriori riferimenti

Consulta:

Best practice

L’obiettivo principale di tutte le raccomandazioni di ottimizzazione è ridurre il set di risultati iniziale. Le best practice elencate di seguito indicano come farlo. Possono (e devono) essere combinate.

Filtrare solo le proprietà di livello superiore

Attualmente, il filtro a livello JCR funziona solo per i frammenti di livello superiore.

Se un filtro comprende i campi di un frammento nidificato, AEM deve ricorrere al caricamento (nella memoria) di tutti i frammenti che condividono il modello sottostante.

Puoi comunque ottimizzare tali query GraphQL combinando espressioni filtro su campi di frammenti di primo livello e su campi di frammenti nidificati con l’operatore AND.