Cache

LocalStorageCacheStrategy

Strategia di cache basata su localStorage. ~5-10MB, persistenza permanente, API sincrona. Utile come fallback IndexedDB per dataset piccoli.

Cosa fa

LocalStorageCacheStrategy persiste le entry in localStorage con un prefisso configurabile. Estende WebStorageCacheStrategy (logica condivisa con SessionStorage).

Caratteristiche:

  • Capacita ~5-10MB (limite browser per origin)
  • Persistenza permanente — sopravvive a chiusura browser e riavvio sistema
  • API sincrona — letture/scritture bloccano il main thread (attenzione su payload grandi)
  • Condiviso tra tab dello stesso origin

Quando usarla

  • Fallback quando IndexedDB non e disponibile (browser datati, modalita private)
  • Dataset piccoli — config utente, ultime preferenze, lookup table compatte
  • Casi di compatibilita dove IndexedDB e bloccato da policy enterprise
Quota exceeded: con payload grandi setItem puo lanciare QuotaExceededError. La strategy gestisce automaticamente il fallback: prova cleanExpired() e ritenta. Se anche il retry fallisce, l'errore viene silenziato con un console.warn. Per dataset > qualche MB usare IndexedDBCacheStrategy.

Costruttore

class LocalStorageCacheStrategy extends WebStorageCacheStrategy {
  constructor(prefix?: string)
}
ParametroTipoDefaultDescrizione
prefixstring'pzeta_cache_'Prefisso per le chiavi in localStorage. Permette di isolare cache di app diverse o aree diverse della stessa app

Esempio

import { LocalStorageCacheStrategy, CacheService } from '@pzeta/postgrest'

// Default prefix
const strategy = new LocalStorageCacheStrategy()
// Chiavi: pzeta_cache_<key>

// Prefix custom
const crmStrategy = new LocalStorageCacheStrategy('crm_cache_')
// Chiavi: crm_cache_<key>

const cache = CacheService.getInstance(httpClient, strategy)

Comportamento

Vedi WebStorageCacheStrategy per i dettagli condivisi:

  • setItem — serializza con JSON.stringify, gestisce QuotaExceededError
  • getItem — parse JSON, verifica scadenza, rimuove entry corrotte
  • clear(prefix?) — itera le chiavi con prefix interno, filtra ulteriormente per keyPrefix se passato
  • cleanExpired() — itera, elimina entry scadute o corrotte
  • supportsTTL()true
  • isPersistent()true

Vedi anche