EmDash legge i contenuti e la configurazione del sito dal database ad ogni richiesta. La cache degli oggetti memorizza quei risultati delle query in un archivio chiave/valore veloce, cosicché le richieste ripetute vengono servite dalla cache anziché dal database. Riduce il carico di lettura sul database — utile su Cloudflare, dove KV serve molte più richieste al secondo rispetto a D1.
La cache degli oggetti è opzionale e disabilitata per impostazione predefinita. Abilitala aggiungendo un adattatore objectCache all’integrazione emdash().
Panoramica
| Backend | Ideale per | Condiviso tra isolate |
|---|---|---|
| KV | Cloudflare Workers | Sì |
| Memory | Node.js, sviluppo locale | No (per processo) |
Su Cloudflare, le richieste sono servite da molti isolate di breve durata in diverse regioni. KV è condiviso da tutti, quindi un valore memorizzato nella cache da una richiesta è disponibile per la successiva, ovunque. Il backend di memoria memorizza all’interno di un singolo processo, adatto a un server Node.js di lunga durata.
Cloudflare KV
Configura l’adattatore KV e puntalo a un binding KV:
import emdash from "emdash/astro";
import { d1, r2, kvCache } from "@emdash-cms/cloudflare";
export default defineConfig({
integrations: [
emdash({
database: d1({ binding: "DB" }),
storage: r2({ binding: "MEDIA" }),
objectCache: kvCache({ binding: "CACHE" }),
}),
],
});
Configurazione
Crea un namespace KV e aggiungi il binding alla tua configurazione Wrangler.
npx wrangler kv namespace create CACHE
Il comando stampa un id del namespace. Aggiungilo sotto il nome del binding usato in kvCache:
wrangler.jsonc
{
"kv_namespaces": [
{
"binding": "CACHE",
"id": "<namespace-id>"
}
]
} wrangler.toml
[[kv_namespaces]]
binding = "CACHE"
id = "<namespace-id>" Opzioni
| Opzione | Tipo | Predefinito | Descrizione |
|---|---|---|---|
binding | string | — | Nome del binding KV dalla configurazione Wrangler. Obbligatorio. |
defaultTtl | number | 3600 | Time-to-live per le voci nella cache, in secondi. KV impone un minimo di 60 secondi. |
revalidate | number | 1000 | Finestra di riutilizzo dell’epoca locale dell’isolate, in millisecondi. Vedi Freschezza. |
timeout | number | 2000 | Tempo massimo in millisecondi di attesa per un’operazione KV prima di trattarla come cache miss. Protegge da una lettura KV bloccata che sospende la richiesta. Imposta a 0 per disabilitare. |
keyPrefix | string | "em" | Prefisso per ogni chiave della cache. Imposta un valore unico quando più siti condividono un namespace. |
Node.js (memoria)
L’adattatore di memoria memorizza nella cache all’interno del processo del server. Non necessita di alcun servizio esterno:
import emdash, { memoryCache } from "emdash/astro";
import { sqlite } from "emdash/db";
export default defineConfig({
integrations: [
emdash({
database: sqlite({ url: "file:./data.db" }),
objectCache: memoryCache(),
}),
],
});
Opzioni
| Opzione | Tipo | Predefinito | Descrizione |
|---|---|---|---|
defaultTtl | number | 3600 | Time-to-live per le voci nella cache, in secondi. |
revalidate | number | 1000 | Finestra di riutilizzo dell’epoca locale dell’isolate, in ms. |
maxEntries | number | 1000 | Numero massimo di chiavi nella cache prima che quelle più vecchie vengano espulse. |
keyPrefix | string | "em" | Prefisso per ogni chiave della cache. |
Cosa viene memorizzato nella cache
La cache degli oggetti copre le letture che vengono eseguite in un tipico rendering di pagina:
- Query sui contenuti:
getEmDashCollection,getEmDashEntryeresolveEmDashPath. - Impostazioni del sito, menu di navigazione e termini di tassonomia.
Le richieste dell’API admin, i file multimediali e le risposte HTML complete non sono gestite qui. Per memorizzare nella cache l’HTML renderizzato al bordo, vedi Distribuire su Cloudflare.
Freschezza
La modifica dei contenuti attraverso il pannello di amministrazione o l’API REST invalida automaticamente le voci della cache interessate. La creazione, aggiornamento, pubblicazione o eliminazione di una voce cancella le query memorizzate nella cache per la sua collezione; la modifica di una firma o di un termine di tassonomia cancella le voci che lo visualizzano.
Per i visitatori anonimi, una modifica impiega del tempo per apparire in tutti gli isolate man mano che raccolgono l’epoca aggiornata. Con il backend di memoria intra-isolate questo è immediato. Con Workers KV è limitato dalla propagazione della cache edge di KV (consistenza eventuale, fino a ~60 secondi) più la finestra revalidate locale all’isolate (predefinita un secondo). Abbassa revalidate per una propagazione locale più veloce a costo di più letture sulla cache; alzalo per leggere la cache meno spesso.
Contenuto programmato
Le voci programmate diventano visibili quando il loro orario di pubblicazione passa. Una pagina nella cache riflette una voce programmata appena pubblicata alla prossima modifica della sua collezione, o quando il defaultTtl della voce nella cache scade. Se la pubblicazione programmata precisa è importante per il tuo sito, imposta un defaultTtl più basso.