Atualmente, estou desenvolvendo um site que fará uso do localStorage do HTML5. Eu li tudo sobre as limitações de tamanho para diferentes navegadores. No entanto, não vi nada sobre como descobrir o tamanho atual de uma instância localStorage. Esta pergunta parece indicar que o JavaScript não tem uma maneira embutida de mostrar o tamanho de uma determinada variável. O localStorage tem uma propriedade de tamanho de memória que eu não vi? Existe uma maneira fácil de fazer isso que estou perdendo?
Meu site foi criado para permitir que os usuários insiram informações no modo 'offline', portanto, poder avisá-los quando o armazenamento estiver quase cheio é muito importante.
javascript
html
local-storage
derivação
fonte
fonte
Respostas:
Execute este snippet no console JavaScript (versão de uma linha):
O mesmo código em várias linhas para fins de leitura
ou adicione este texto no campo 'localização' de um favorito para uso conveniente
Snippets de PS são atualizados de acordo com a solicitação no comentário. Agora, o cálculo inclui o comprimento da própria chave. Cada comprimento é multiplicado por 2 porque o caractere em javascript armazena como UTF-16 (ocupa 2 bytes)
PPS deve funcionar tanto no Chrome quanto no Firefox.
fonte
var t = 0; for(var x in localStorage) { t += (x.length + localStorage[x].length) * 2; } console.log(t/1024+ " KB");
var _lsTotal = 0, _xLen, _x; for (_x in localStorage) { _xLen = (((localStorage[_x].length || 0) + (_x.length || 0)) * 2); _lsTotal += _xLen; console.log(_x.substr(0, 50) + " = " + (_xLen / 1024).toFixed(2) + " KB") }; console.log("Total = " + (_lsTotal / 1024).toFixed(2) + " KB");
_x
quebra. Simplesmente remova o sublinhado.Partindo do que @Shourav disse acima, escrevi uma pequena função que deve pegar com precisão todas as suas
localStorage
chaves (para o domínio atual) e calcular o tamanho combinado para que você saiba exatamente quanta memória é ocupada pelo seulocalStorage
objeto:Meu devolvido:
"30.896484375 KB"
fonte
O IE possui uma propriedade permanentSpace do objeto Storage. Os outros navegadores não têm equivalente neste momento.
Eu acredito que a quantidade de espaço padrão é 5 MB, embora eu não tenha testado pessoalmente.
fonte
Aqui está um exemplo simples de como fazer isso e deve funcionar com todos os navegadores
fonte
Espero que isso ajude alguém.
Porque Jas- exemplo em jsfiddle não funciona para mim, eu vim com esta solução. (obrigado a Serge Seletskyy e Shourav pelos bits que usei no código abaixo)
Abaixo está a função que pode ser usada para testar quanto espaço está disponível para localStorage e (se alguma chave já estiver em IS) quanto espaço resta.
É um pouco de força bruta, mas funciona em quase todos os navegadores ... exceto no Firefox. Bem, no FF de desktop leva anos (4-5min) para ser concluído, e no Android simplesmente trava.
Abaixo da função está um breve resumo dos testes que fiz em diferentes navegadores em diferentes plataformas. Aproveitar!
E como prometido acima, alguns testes em diferentes navegadores:
GalaxyTab 10.1
iPhone 4s iOS 6.1.3
MacBook Pro OSX 1.8.3 (Core 2 Duo 2.66 8 Gb de memória)
iPad 3 iOS 6.1.3
Windows 7 -64b (Core 2 Duo 2,93 6 Gb de memória)
Vitória 8 (no Paralelo 8)
fonte
array.forEach()
no seu código, como sei que não existe no IE, você implementa sozinho? Como você mede sua contribuição para a latência geral?forEach()
. Não, eu não implementei, usei o estoqueArray.prototype.forEach()
. De acordo com o Mozilla Developer Network, também conhecido como MDN do IE9, ele tem suporte nativo.Array.prototype.forEach()
máximo possível se meu projeto não for compatível com as versões anteriores do IE.while
loop dividido em duas partes, a primeira como stackoverflow.com/a/3027249/1235394 que preenche localStorage com blocos de dados que crescem exponencialmente, depois a segunda parte com pequenos pedaços de tamanho fixo para preencher completamente o armazenamento. Página de teste: jsfiddle.net/pqpps3tk/1Você pode obter o tamanho atual dos dados de armazenamento local usando a função Blob. Isso pode não funcionar em navegadores antigos, verifique o suporte para
new Blob
eObject.values()
em caniuse.Exemplo:
Object.values () transforma o objeto localStorage em um array. Blob transforma o array em dados brutos.
fonte
Blob
que não restringe a codificação de string a UTF-16, então esse pode ser o método mais confiável.new Blob(['X']).size;
= 1 enquantonew Blob(['☃']).size
(U + 2603 / caractere do boneco de neve) ==> 3. Soluções baseadas emString.prototype.length
não levam isso em consideração (lidam com "caracteres") enquanto cotas / limites de armazenamento provavelmente o fazem (lidam com bytes), e eu poderia imaginar isso leva a surpresas, por exemplo, ao armazenar caracteres não ingleses / ASCII.Você pode calcular seu armazenamento local pelos seguintes métodos:
Finalmente, o tamanho em bytes será registrado no navegador.
fonte
Eu usaria o código de @tennisgen que pega tudo e conta o conteúdo, mas eu conto as chaves:
fonte
A maneira como resolvi esse problema é criar funções para descobrir o espaço usado e o espaço restante no armazenamento local e, em seguida, uma função que chama essas funções para determinar o espaço máximo de armazenamento.
fonte
Além da resposta de @ serge, que é mais votada aqui, o tamanho das chaves precisa ser considerado. O código abaixo adicionará o tamanho das chaves armazenadas em
localStorage
fonte
undefined
para o itemlength
, em alguns casos, por isso eu adicionei uma condicional à adição:t += (x.length + (this.storage[x].length ? this.storage[x].length : 0)) * 2;
.Conforme as especificações vão, cada caractere de uma string tem 16 bits.
Mas a inspeção com o Chrome (Configurações> Configurações de conteúdo> Cookies e dados do site) nos mostra que iniciar o localStorage leva 3 kB (tamanho de overhead)
E o tamanho dos dados armazenados segue esta relação (com precisão de 1kB)
3 + ((localStorage.x.length * 16) / (8 * 1024)) kB
onde localStorage.x é sua string de armazenamento.
fonte
// Memória ocupada por chave e valor, portanto, Código Atualizado.
fonte
Sim, essa pergunta foi feita há 10 anos. Mas para aqueles interessados (como eu, já que estou construindo um editor de texto offline que salva dados com armazenamento local) e são péssimos em programação, você poderia usar algo simples como isto:
A melhor maneira de preencher a quantidade de armazenamento é visualizar as configurações do site (por exemplo, se você armazenou uma imagem no armazenamento local). Pelo menos no cromo, você pode ver a quantidade de bytes usados (ou seja: 1222 bytes). No entanto, as melhores maneiras de ver o armazenamento local preenchido com js já foram mencionadas acima, portanto, use-as.
fonte
fonte