O EmDash lê o conteúdo e a configuração do site da base de dados em cada pedido. A cache de objetos armazena esses resultados de consultas num armazenamento rápido de chave/valor, para que pedidos repetidos sejam servidos a partir da cache em vez da base de dados. Reduz a carga de leitura na base de dados — útil no Cloudflare, onde o KV serve muito mais pedidos por segundo do que o D1.
A cache de objetos é opcional e está desativada por defeito. Ative-a adicionando um adaptador objectCache à integração emdash().
Visão geral
| Backend | Ideal para | Partilhado entre isolates |
|---|---|---|
| KV | Cloudflare Workers | Sim |
| Memory | Node.js, desenvolvimento local | Não (por processo) |
No Cloudflare, os pedidos são servidos por muitos isolates de curta duração em diferentes regiões. O KV é partilhado por todos, portanto um valor em cache por um pedido está disponível para o seguinte, em qualquer lugar. O backend de memória faz cache dentro de um único processo, adequado para um servidor Node.js de longa duração.
Cloudflare KV
Configure o adaptador KV e aponte-o para um 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" }),
}),
],
});
Configuração
Crie um namespace KV e adicione o binding à sua configuração Wrangler.
npx wrangler kv namespace create CACHE
O comando imprime um id de namespace. Adicione-o sob o nome de binding usado em kvCache:
wrangler.jsonc
{
"kv_namespaces": [
{
"binding": "CACHE",
"id": "<namespace-id>"
}
]
} wrangler.toml
[[kv_namespaces]]
binding = "CACHE"
id = "<namespace-id>" Opções
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
binding | string | — | Nome do binding KV da sua configuração Wrangler. Obrigatório. |
defaultTtl | number | 3600 | Tempo de vida para entradas em cache, em segundos. O KV impõe um mínimo de 60 segundos. |
revalidate | number | 1000 | Janela de reutilização de época local do isolate, em milissegundos. Ver Frescura. |
timeout | number | 2000 | Tempo máximo em milissegundos para esperar uma operação KV antes de tratá-la como cache miss. Protege contra uma leitura KV bloqueada que suspende o pedido. Definir como 0 para desativar. |
keyPrefix | string | "em" | Prefixo para cada chave de cache. Defina um valor único quando vários sites partilham um namespace. |
Node.js (memória)
O adaptador de memória faz cache dentro do processo do servidor. Não necessita de nenhum serviço externo:
import emdash, { memoryCache } from "emdash/astro";
import { sqlite } from "emdash/db";
export default defineConfig({
integrations: [
emdash({
database: sqlite({ url: "file:./data.db" }),
objectCache: memoryCache(),
}),
],
});
Opções
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
defaultTtl | number | 3600 | Tempo de vida para entradas em cache, em segundos. |
revalidate | number | 1000 | Janela de reutilização de época local do isolate, em ms. |
maxEntries | number | 1000 | Número máximo de chaves em cache antes de despejar as mais antigas. |
keyPrefix | string | "em" | Prefixo para cada chave de cache. |
O que é armazenado em cache
A cache de objetos cobre as leituras que são executadas num rendering de página típico:
- Consultas de conteúdo:
getEmDashCollection,getEmDashEntryeresolveEmDashPath. - Definições do site, menus de navegação e termos de taxonomia.
Pedidos da API admin, ficheiros multimédia e respostas HTML completas não são tratados aqui. Para fazer cache de HTML renderizado na periferia, veja Implementar no Cloudflare.
Frescura
A edição de conteúdo através do painel de administração ou da API REST invalida automaticamente as entradas de cache afetadas. A criação, atualização, publicação ou eliminação de uma entrada limpa as consultas em cache para a sua coleção; a alteração de uma assinatura ou termo de taxonomia limpa as entradas que o exibem.
Para visitantes anónimos, uma alteração demora algum tempo a aparecer em todos os isolates à medida que estes obtêm a época atualizada. Com o backend de memória intra-isolate, isto é imediato. Com Workers KV, está limitado pela propagação da cache de periferia do KV (consistência eventual, até ~60 segundos) mais a janela revalidate local do isolate (predefinição um segundo). Diminua revalidate para propagação local mais rápida ao custo de mais leituras na cache; aumente-o para ler a cache com menos frequência.
Conteúdo agendado
As entradas agendadas tornam-se visíveis quando o seu horário de publicação passa. Uma página em cache reflete uma entrada agendada recém-publicada na próxima alteração à sua coleção, ou quando o defaultTtl da entrada em cache expira. Se a publicação agendada precisa é importante para o seu site, defina um defaultTtl mais baixo.