IndexedDB vs localStorage: qual armazenamento do navegador usar

IndexedDB vs localStorage

IndexedDB vs localStorage: limites, velocidade e quando usar | We.Inc

Compare IndexedDB e localStorage lado a lado: limites de tamanho por navegador, síncrono vs assíncrono, o que cada um consegue guardar e uma demo ao vivo que salva uma nota nos dois.

Escolha localStorage para algumas configurações pequenas: ele guarda só strings, cerca de 5 MiB por origem, e cada chamada trava a página até terminar. Escolha IndexedDB para dados de verdade: é assíncrono, transacional, guarda objetos, datas e arquivos, e a cota é uma fatia do disco. A demo abaixo grava uma nota nos dois.

A versão curta

As duas APIs mantêm dados no navegador do visitante depois que a aba fecha, e as duas ficam restritas à origem da página. A diferença é o peso. localStorage é um pequeno mapa síncrono de strings que você aprende em um minuto; IndexedDB é um pequeno banco de dados com versões, object stores e transações. Esta página mostra os limites reais da documentação e deixa você ver o que cada um retorna.

Perguntas frequentes

Quanto cabe no localStorage?

A MDN documenta um limite de 5 MiB de local storage e 5 MiB de session storage por origem, 10 MiB no total. Como os valores são strings UTF-16, a quantidade de caracteres que cabe pode ser menor do que você espera. Passar do limite lança um QuotaExceededError.

Quanto cabe no IndexedDB?

Depende do navegador e do disco. Navegadores Chromium permitem a uma origem até 60% do tamanho total do disco. O Firefox permite o menor entre 10% do disco ou 10 GiB por grupo de sites no modo best-effort. O app de navegador Safari permite cerca de 60% do disco. Use navigator.storage.estimate() para ler o número real.

IndexedDB é mais rápido que localStorage?

Para um único valor pequeno, localStorage costuma ser mais rápido de escrever no código e rápido o bastante para executar. O problema é que ele é síncrono, então leituras e gravações grandes congelam a thread principal. O IndexedDB faz o trabalho fora do fluxo principal e avisa quando termina, o que mantém a rolagem e a digitação fluidas.

O navegador pode apagar meus dados do IndexedDB?

Sim. Por padrão o armazenamento é best-effort, então o navegador pode remover os dados de uma origem quando o disco está apertado. Chamar navigator.storage.persist() muda para o modo persistente, em que só a pessoa pode limpá-los. O Firefox mostra um pedido de permissão; o Chrome e o Safari decidem pela forma como a pessoa usa o site.

Devo usar localStorage para um token de login?

Não. Qualquer script na página, inclusive um injetado, consegue ler o localStorage e o IndexedDB. Guarde identificadores de sessão em cookies marcados como HttpOnly, Secure e SameSite, que os scripts da página não conseguem ler.

Por que ser síncrono importa

Strings vs structured clone

Uma regra simples para escolher

Limites de armazenamento por navegador

Números conforme documentados na página de cotas de armazenamento da MDN. IndexedDB, a Cache API e o origin private file system compartilham a mesma cota.

Cota por origem

O mesmo salvamento nas duas APIs

localStorage: stringify, proteção, parse

O try...catch trata um armazenamento cheio ou bloqueado. A data precisa ser reconstruída à mão depois do parse.

IndexedDB: abrir, atualizar, gravar em uma transação

onupgradeneeded roda na primeira vez e sempre que o número da versão aumenta; é o único lugar onde se criam object stores.

Pergunte quanto espaço você tem e peça para mantê-lo

estimate() retorna contagens aproximadas de bytes. persist() resolve como true se o navegador concedeu armazenamento persistente.

Salve uma nota nos dois armazenamentos

Esta demo roda só no seu navegador. Ela grava na chave we-demo-note e em um banco chamado we-demo-db, e o botão Limpar remove os dois.

Nota para salvar

Ligar para a gráfica na sexta

Salvar nos dois

Ler de volta

Ver cota

Limpar dados da demo

Nada lido ainda. Salve uma nota e depois clique em Ler de volta.

O localStorage retornou

O IndexedDB retornou

Tipo: {v}

savedAt é um Date: {v}

Nada armazenado

Nota salva no localStorage e no IndexedDB.

Chave e banco da demo removidos.

Esta origem usa cerca de {n} MB de aproximadamente {v} MB disponíveis.

Este navegador não oferece navigator.storage.estimate().

O armazenamento falhou neste navegador: {v}

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site