Caching
Lacis fournit deux APIs de cache : basée sur un middleware (createResponseCache) et par enveloppement de handler (withCache).
Approche middleware
Section intitulée « Approche middleware »createResponseCache enregistre un middleware qui met en cache les réponses avant qu’elles soient envoyées. Appliquez-le globalement ou par route.
import { createServer } from 'lacis'import { createResponseCache } from 'lacis'
createServer('./routes', { middleware: { beforeRequest: createResponseCache({ ttl: 60 }), },})| Option | Type | Défaut | Description |
|---|---|---|---|
ttl | number | requis | Durée du cache en secondes |
methods | string[] | ['GET', 'HEAD'] | Méthodes HTTP à cacher |
maxSize | number | 500 | Entrées max avant éviction LRU |
keyGenerator | (req) => string | METHOD:URL | Fonction de clé de cache |
match | (req) => boolean | — | Ne cache que si cette fonction retourne true |
exclude | string | string[] | — | Préfixes de chemin à ignorer |
shouldCache | (req, res) => boolean | Codes 2xx | Si la réponse doit être stockée |
Exclusions
Section intitulée « Exclusions »createResponseCache({ ttl: 60, exclude: ['/admin', '/api/private'],})Enveloppement de handler
Section intitulée « Enveloppement de handler »withCache enveloppe un handler individuel. Utile quand vous voulez le cache sur une seule route sans middleware global.
import { withCache } from 'lacis'import type { Request, Response } from 'lacis'
export const GET = withCache( { ttl: 300 }, async (req: Request, res: Response) => { const data = await fetchExpensiveData() res.json(data) })| Option | Type | Défaut | Description |
|---|---|---|---|
ttl | number | requis | Durée du cache en secondes |
maxSize | number | 500 | Entrées max avant éviction LRU |
key | (req) => string | METHOD:URL | Fonction de clé de cache |
Éviction LRU
Section intitulée « Éviction LRU »Quand maxSize est atteint, les 50 entrées les moins récemment utilisées sont évincées d’un coup. Les entrées expirent aussi individuellement selon le ttl.