IndexedDB vs localStorage: quale storage del browser usare

IndexedDB vs localStorage

IndexedDB vs localStorage: limiti, velocità, quando usarli | We.Inc

IndexedDB e localStorage a confronto: limiti per browser, sincrono o asincrono, cosa può salvare ciascuno, più una demo dal vivo che scrive la stessa nota in entrambi.

Scegli localStorage per poche impostazioni piccole: salva solo stringhe, circa 5 MiB per origine, e ogni chiamata blocca la pagina finché non termina. Scegli IndexedDB per dati veri: è asincrono, transazionale, salva oggetti, date e file, e la sua quota è una parte del disco. La demo qui sotto scrive la stessa nota in entrambi.

La versione breve

Entrambe le API conservano dati nel browser del visitatore anche dopo la chiusura della scheda, ed entrambe sono limitate all'origine della pagina. La differenza è il peso. localStorage è una piccola mappa sincrona di stringhe che impari in un minuto; IndexedDB è un piccolo database con versioni, object store e transazioni. Questa pagina mostra i limiti reali presi dalla documentazione e ti fa vedere cosa restituisce ciascuna.

Domande frequenti

Quanto può contenere localStorage?

MDN documenta un limite di 5 MiB di local storage e 5 MiB di session storage per origine, 10 MiB in totale. Poiché i valori sono stringhe UTF-16, il numero di caratteri che ci stanno può essere inferiore a quanto pensi. Superare il limite genera un QuotaExceededError.

Quanto può contenere IndexedDB?

Dipende dal browser e dal disco. I browser Chromium concedono a un'origine fino al 60% della dimensione totale del disco. Firefox concede il valore minore tra il 10% del disco e 10 GiB per gruppo di siti in modalità best-effort. Le app browser Safari concedono circa il 60% del disco. Usa navigator.storage.estimate() per leggere il valore reale.

IndexedDB è più veloce di localStorage?

Per un singolo valore piccolo, localStorage di solito è più rapido da scrivere nel codice e abbastanza veloce in esecuzione. Il problema è che è sincrono, quindi letture e scritture grandi bloccano il main thread. IndexedDB lavora fuori dal flusso principale e ti avvisa quando ha finito, così lo scorrimento e la digitazione restano fluidi.

Il browser può cancellare i miei dati IndexedDB?

Sì. Per impostazione predefinita lo storage è best-effort, quindi il browser può eliminare i dati di un'origine quando il disco è sotto pressione. Chiedere navigator.storage.persist() passa alla modalità persistente, in cui solo la persona può cancellarli. Firefox mostra una richiesta di permesso; Chrome e Safari decidono in base a come la persona usa il sito.

Dovrei usare localStorage per un token di login?

No. Qualsiasi script sulla pagina, compreso uno iniettato, può leggere localStorage e IndexedDB. Tieni gli identificatori di sessione in cookie contrassegnati HttpOnly, Secure e SameSite, che gli script della pagina non possono leggere.

Perché conta che sia sincrono

Stringhe contro structured clone

Una regola semplice per scegliere

Limiti di storage per browser

Valori come documentati nella pagina di MDN sulle quote di storage. IndexedDB, la Cache API e l'origin private file system condividono la stessa quota.

Quota per origine

Lo stesso salvataggio con entrambe le API

localStorage: stringify, protezione, parse

Il try...catch gestisce uno storage pieno o bloccato. La data va ricostruita a mano dopo il parse.

IndexedDB: apri, aggiorna, scrivi in una transazione

onupgradeneeded viene eseguito la prima volta e ogni volta che il numero di versione sale; è l'unico punto in cui creare gli object store.

Chiedi quanto spazio hai, e chiedi di tenerlo

estimate() restituisce conteggi di byte approssimativi. persist() si risolve in true se il browser ha concesso lo storage persistente.

Salva una nota in entrambi gli storage

Questa demo gira solo nel tuo browser. Scrive sotto la chiave we-demo-note e in un database chiamato we-demo-db, e il pulsante Cancella li rimuove entrambi.

Nota da salvare

Chiamare il tipografo venerdì

Salva in entrambi

Rileggi

Controlla quota

Cancella dati demo

Ancora nulla letto. Salva una nota, poi premi Rileggi.

localStorage ha restituito

IndexedDB ha restituito

Tipo: {v}

savedAt è una Date: {v}

Nulla salvato

Nota salvata in localStorage e IndexedDB.

Chiave e database della demo rimossi.

Questa origine usa circa {n} MB su circa {v} MB disponibili.

Questo browser non offre navigator.storage.estimate().

Lo storage non ha funzionato in questo browser: {v}

Inizia gratis · Nessuna carta di credito richiesta

Correlati: Guide

Prodotto

Per chi è

Funzionalità

Risorse

Azienda

Mappa del sito