IndexedDB vs localStorage: welke browseropslag gebruikt u?

IndexedDB vs localStorage

IndexedDB vs localStorage: limieten, snelheid, wanneer welke | We.Inc

Vergelijk IndexedDB en localStorage naast elkaar: opslaglimieten per browser, sync of async, wat elk kan opslaan, plus een live demo die één notitie in beide bewaart.

Kies localStorage voor een paar kleine instellingen: het slaat alleen strings op, ongeveer 5 MiB per origin, en elke aanroep blokkeert de pagina tot hij klaar is. Kies IndexedDB voor echte data: het is asynchroon, werkt met transacties, slaat objecten, datums en bestanden op, en de quota is een deel van de schijf. De demo hieronder schrijft één notitie naar beide.

De korte versie

Beide API's bewaren data in de browser van de bezoeker nadat het tabblad is gesloten, en beide zijn gebonden aan de origin van de pagina. Het verschil zit in het gewicht. localStorage is een piepkleine synchrone stringmap die u in een minuut leert; IndexedDB is een kleine database met versies, object stores en transacties. Deze pagina toont de echte limieten uit de documentatie en laat u zien wat elk van beide teruggeeft.

Veelgestelde vragen

Hoeveel kan localStorage bevatten?

MDN documenteert een limiet van 5 MiB local storage en 5 MiB session storage per origin, 10 MiB in totaal. Omdat waarden UTF-16-strings zijn, kan het aantal tekens dat erin past lager zijn dan u verwacht. Wie over de limiet gaat, krijgt een QuotaExceededError.

Hoeveel kan IndexedDB bevatten?

Dat hangt af van de browser en de schijf. Chromium-browsers geven een origin tot 60% van de totale schijfgrootte. Firefox staat in best-effort-modus het kleinste toe van 10% van de schijf of 10 GiB per sitegroep. Safari-browserapps staan ongeveer 60% van de schijf toe. Gebruik navigator.storage.estimate() om het echte getal uit te lezen.

Is IndexedDB sneller dan localStorage?

Voor één piepkleine waarde is localStorage meestal sneller in code te schrijven en snel genoeg in gebruik. Het probleem is dat het synchroon is, dus grote lees- en schrijfacties bevriezen de main thread. IndexedDB doet het werk buiten de hoofdstroom en laat weten wanneer het klaar is, zodat scrollen en typen soepel blijven.

Kan de browser mijn IndexedDB-data verwijderen?

Ja. Opslag is standaard best-effort, dus de browser kan de data van een origin verwijderen als de schijf krap wordt. Met navigator.storage.persist() schakelt u over naar persistente modus, waarin alleen de gebruiker het kan wissen. Firefox toont een toestemmingsvraag; Chrome en Safari beslissen op basis van hoe iemand de site gebruikt.

Moet ik localStorage gebruiken voor een inlogtoken?

Nee. Elk script op de pagina, ook een geïnjecteerd script, kan localStorage en IndexedDB lezen. Bewaar sessie-ID's in cookies met HttpOnly, Secure en SameSite, die paginascripts niet kunnen lezen.

Waarom synchroon ertoe doet

Strings tegenover structured clone

Een eenvoudige regel om te kiezen

Opslaglimieten per browser

Cijfers zoals gedocumenteerd op de pagina over opslagquota van MDN. IndexedDB, de Cache API en het origin private file system delen dezelfde quota.

Quota per origin

Dezelfde opslag in beide API's

localStorage: stringify, afvangen, parse

De try...catch vangt een volle of geblokkeerde opslag af. De datum moet na het parsen met de hand opnieuw worden opgebouwd.

IndexedDB: openen, upgraden, schrijven in een transactie

onupgradeneeded draait de eerste keer en telkens als het versienummer omhooggaat; dat is de enige plek om object stores aan te maken.

Vraag hoeveel ruimte u hebt, en vraag om die te behouden

estimate() geeft bij benadering het aantal bytes terug. persist() resolvet naar true als de browser persistente opslag heeft toegekend.

Sla één notitie op in beide opslagen

Deze demo draait alleen in uw browser. Hij schrijft onder de sleutel we-demo-note en in een database met de naam we-demo-db, en de knop Wissen verwijdert beide.

Notitie om op te slaan

Vrijdag de drukker bellen

Opslaan in beide

Teruglezen

Quota controleren

Demodata wissen

Nog niets gelezen. Sla een notitie op en druk dan op Teruglezen.

localStorage gaf terug

IndexedDB gaf terug

Type: {v}

savedAt is een Date: {v}

Niets opgeslagen

De notitie is opgeslagen in localStorage en IndexedDB.

Demosleutel en database verwijderd.

Deze origin gebruikt ongeveer {n} MB van de circa {v} MB beschikbaar.

Deze browser biedt navigator.storage.estimate() niet aan.

Opslag mislukt in deze browser: {v}

Gratis beginnen · Geen creditcard nodig

Gerelateerd: Gidsen

Product

Voor wie

Functies

Bronnen

Bedrijf

Sitemap