Gerenciando o armazenamento off-line HTML5

O HTML5 introduziu muitas APIs de armazenamento que permitem armazenar uma grande quantidade de dados localmente nas navegadores da Web. Mas a quantidade de espaço alocada para cada app é, por padrão, restrita a alguns megabytes. O Google Chrome permite que você peça uma cota de armazenamento maior, além do limite anterior de apenas 5 MB.

Este documento apresenta os conceitos básicos sobre os tipos de armazenamento usados no Chrome e descreve a API Quota Management experimental, que permite gerenciar sua cota de armazenamento. A pressupõe que você já conheça os conceitos gerais de armazenamento do lado do cliente e saber como usar APIs off-line.

Índice

  1. Tipos de armazenamento
    1. Temporário
    2. Persistente
    3. Sem limites
    4. Comparação dos tipos de armazenamento
  2. Como gerenciar sua cota
    1. Consultar o uso e a disponibilidade do armazenamento
    2. Pedir mais armazenamento
    3. Redefinir cota para testes
  3. Referência da API
    1. Constantes
    2. Visão geral do método
    3. Métodos
  4. Desenvolvimento futuro

Tipos de armazenamento

No Google Chrome, você pode solicitar três tipos de armazenamento:

Esses tipos de armazenamento são descritos em mais detalhes nas seções a seguir e comparados com cada na tabela abaixo.

Armazenamento temporário

O armazenamento temporário é um armazenamento temporário disponível para qualquer app da Web. O Chrome oferece automaticamente o armazenamento temporário do seu app para que você não precise solicitar a alocação.

Compartilhamento da piscina

O armazenamento temporário é compartilhado entre todos os apps da Web em execução no navegador. O pool compartilhado pode ser até 1/3 do espaço disponível em disco. O armazenamento já usado pelos apps é incluídos no cálculo do pool compartilhado; ou seja, o cálculo é baseado (available storage space + storage being used by apps) * .333 .

Cada app pode ter até 20% do pool compartilhado. Por exemplo, se o espaço total disponível em disco é 60 GB, o pool compartilhado tem 20 GB e o app pode ter até 4 GB. Isso é calculado a partir de 20% (até 4 GB) de 1/3 (até 20 GB) do espaço disponível em disco (60 GB).

Pedir mais espaço

No entanto, é possível consultar a quantidade de espaço de armazenamento disponível para seu app e a quantidade de dados já armazenados para o aplicativo, não é possível solicitar mais espaço de armazenamento temporário. Se um app exceder a cota alocada, será gerado um erro.

Sem espaço de armazenamento

Quando a cota de armazenamento para todo o pool é excedida, todos os dados são armazenados pelo menos host usado recentemente é excluído. O navegador, no entanto, não vai eliminar os dados no LocalStorage e SessionStorage. No caso de dados armazenados em outras APIs off-line, o navegador exclui os dados por completo e não em parte para que os dados do app não sejam corrompidos de forma inesperada.

Como cada app está limitado a um máximo de 20% do pool de armazenamento, a exclusão provavelmente só ocorrerá se o usuário está executando ativamente mais de cinco apps off-line, e cada um deles usa o armazenamento máximo.

No entanto, o espaço de armazenamento disponível pode diminuir à medida que os usuários adicionam mais arquivos aos discos rígidos. Quando o o espaço disponível em disco fica pequeno. Lembre-se de que o pool compartilhado recebe apenas metade do espaço atual disponível espaço em disco), o navegador exclui todos os dados armazenados do host usado menos recentemente.

Armazenamento permanente

O armazenamento permanente é aquele que permanece no navegador, a menos que o usuário o elimine. Disponível somente para apps que usam a API File System, mas que no futuro serão disponibilizados para outras APIs off-line como IndexedDB e Application Cache.

Um aplicativo pode ter uma cota maior para armazenamento permanente do que o armazenamento temporário, mas é solicitar armazenamento usando a API Cota Management e o usuário deve conceder a você permissão para usar mais espaço. O Chrome apresenta uma barra de informações que solicita que o usuário conceda ao app mais espaço de armazenamento local.

Armazenamento ilimitado

O armazenamento ilimitado é semelhante ao armazenamento permanente, mas está disponível apenas para apps do Chrome e (arquivos .crx). O tamanho do armazenamento ilimitado é limitado apenas pela disponibilidade de espaço no disco rígido do usuário. Você pode pedir a permissão unlimitedStorage no arquivo de manifesto para: um app ou uma extensão. Na instalação, o usuário é informado sobre as permissões exigidas pelo o app ou a extensão. Ao prosseguir com a instalação, o usuário implicitamente concede permissão para todas as páginas com URLs listados no arquivo manifest.json.

Para saber mais, consulte os respectivos guias do desenvolvedor para apps e extensões.

Como comparar tipos de armazenamento

A tabela a seguir descreve as diferenças entre os três tipos de armazenamento.

 Armazenamento temporárioArmazenamento permanenteArmazenamento ilimitado
Descrição básica

Armazenamento temporário disponível para qualquer app da Web.

Ela é automática e não precisa ser solicitada.

Armazenamento permanente que precisa ser solicitado pela API Quota Management e concedido pelos usuários.

Armazenamento permanente para apps e extensões do Chrome.

Ele é definido no arquivo de manifesto e precisa ser concedido pelos usuários.

Disponibilidade

Todos os apps da Web.

Todos os apps da Web.Exclusivo para extensões do Chrome, bem como apps da Web hospedados e instalados.
PermissãoNenhum. Você pode usá-lo sem solicitá-lo explicitamente.

Você precisa solicitar mais armazenamento usando a API Quota Management.

Você pode pedir a permissão unlimitedStorage no arquivo de manifesto do app ou da extensão.
Experiência do usuário no primeiro usoInvisível para o usuário. O app apenas é executado.

O Chrome mostra uma barra de informações que solicita que o usuário aceite ou recuse a solicitação de armazenamento.

Porém, se a quantidade de cota solicitada for menor que a alocação atual do aplicativo, nenhum prompt será exibido. A cota maior será mantida.

Na instalação, o usuário é informado sobre as permissões exigidas pelo app ou extensão. Ao continuar com a instalação, o usuário concede permissão implicitamente para todas as páginas com URLs listados no arquivo manifest.json de um app ou uma extensão.

Experiência do usuário em solicitações subsequentes para aumentar o armazenamentoNão relevante. Não é possível pedir mais armazenamento temporário.

O Chrome avisa o usuário novamente.

 

O Chrome não solicita o usuário após a instalação, independentemente das solicitações de aumento de cota feitas pelo app ou pela extensão.
Persistência de dados

Temporário. O navegador pode excluir os dados.

Persistente. O navegador não exclui os dados, a menos que o usuário o oriente. Os dados são disponibilizados em acessos subsequentes.

Não presuma que os dados são permanentes, porque o usuário pode excluí-los.

Igual ao armazenamento permanente.

 

Espaço de armazenamento padrão

Até 20% do pool compartilhado.

0 MB. Você precisa solicitar explicitamente um espaço de armazenamento específico.

0 MB. É necessário solicitar explicitamente unlimitedStorage no arquivo de manifesto.

Se você não especificar seus requisitos de armazenamento, o Chrome vai alocar o armazenamento para o app usando o pool compartilhado do armazenamento temporário.

Espaço de armazenamento máximoAté 20% do pool compartilhado.tão grande quanto o espaço disponível no disco rígido. Não tem pool de armazenamento fixo.tão grande quanto o espaço disponível no disco rígido.
Caso de uso recomendadoArmazenamento em cache.Apps que funcionam off-line ou têm muitos recursos.Aplicativos projetados para serem executados no Google Chrome.
APIs que podem usá-lo

APIs off-line

  • Cache do app
  • Sistema de arquivos
  • IndexedDB
  • WebSQL (descontinuado em 18 de novembro de 2010)

Observação:as APIs Web Storage, como LocalStorage e SessionStorage, continuam com 5 MB.

API File System

APIs off-line

  • Cache do app
  • Sistema de arquivos
  • IndexedDB
  • WebSQL (descontinuado)

Observação:as APIs Web Storage, como LocalStorage e SessionStorage, continuam com 5 MB.

Como gerenciar sua cota

Com a API de gerenciamento de cotas, que foi introduzida no Chrome 13, você pode fazer o seguinte:

A API é implementada com o objeto global window.webkitStorageInfo.

Para acessar a documentação de referência, consulte a próxima seção.

consultar o uso e a disponibilidade do armazenamento

Para consultar o tamanho do armazenamento que está sendo usado e o espaço disponível restante para o host, chame queryUsageAndQuota() pelo seguinte:

  • Tipo de armazenamento que você quer verificar
  • Callback de sucesso

O uso relatado pela API pode não corresponder ao tamanho real dos dados do usuário, já que cada armazenamento pode precisar de alguns bytes extras para armazenar os metadados. Além disso, as atualizações de status podem demorar, resultando A API não reflete o status de armazenamento mais recente.

O snippet de código a seguir mostra como perguntar sobre o espaço de armazenamento:

// Request storage usage and capacity left
// Choose either Temporary or Persistent
navigator.webkitTemporaryStorage.queryUsageAndQuota (
    function(usedBytes, grantedBytes) {
        console.log('we are using ', usedBytes, ' of ', grantedBytes, 'bytes');
    },
    function(e) { console.log('Error', e);  }
);

Para solicitar o status do armazenamento permanente, basta substituir webkitStorageInfo.TEMPORARY com webkitStorageInfo.PERSISTENT. O tipo enumerado também está objeto window (namespace global), portanto, você também pode usar window.PERSISTENT e window.TEMPORARY

Como solicitar mais armazenamento

Você não precisa pedir mais armazenamento temporário, pois a alocação é automática e não é possível além do limite máximo (conforme descrito na tabela).

Para o armazenamento permanente da API File System, a cota padrão é 0. Portanto, é necessário solicitar armazenamento para seu aplicativo. Chame requestQuota() com o seguinte:

  • Tipo de armazenamento
  • Tamanho
  • Callback de sucesso

Dependendo do que você pedir, vai acontecer o seguinte:

  • Se você solicitar uma cota maior, o navegador apresentará uma barra de informações ao usuário e solicitará que ele faça isso conceder ou negar permissões para aumentar a cota. Em alguns casos, a solicitação pode ser silenciosa rejeitada, e a cota atual ou a cota menor é retornada.
  • Se a quantidade de cota solicitada for menor que a alocação atual do aplicativo, nenhum prompt será exibido.
  • Se pedir mais armazenamento do que é permitido, você vai receber um erro (QUOTA_EXCEEDED_ERR).
  • Se você chamar requestQuota() novamente depois que o usuário já tiver concedido a permissão, nada acontecerá. Portanto, não se preocupe em chamar o método de novo.

Confira a seguir como pedir mais espaço de armazenamento:

// Request Quota (only for File System API)
var requestedBytes = 1024*1024*10; // 10MB

navigator.webkitPersistentStorage.requestQuota (
    requestedBytes, function(grantedBytes) {
        window.requestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler);

    }, function(e) { console.log('Error', e); }
);
});

Redefinindo a cota para testes

Ao testar o armazenamento no app, é recomendável limpar os dados armazenados para poder testar novamente o gerenciamento de cotas no app. Basta seguir estas etapas:

  1. Digite chrome://settings/cookies na omnibox (a barra de endereço).
  2. Procure seu app.
  3. Selecione seu app.
  4. Clique no X no lado direito da seleção destacada.

Referência da API

Esta seção documenta os métodos da API Quota Management.

Constantes

Confira abaixo as constantes webkitStorageInfo, que indicam o tipo de armazenamento.

ConstanteValorDescrição
TEMPORARY0Armazenamento temporário.
PERSISTENT1Armazenamento permanente.

Visão geral do método

queryUsageAndQuota
requestQuota

Métodos

queryUsageAndQuota

Verifique o tamanho do armazenamento que está sendo usado e o espaço disponível restante para o host.

 // you could also use it from webkitPersistentStorage
navigator.webkitTemporaryStorage.queryUsageAndQuota(
      successCallback,
      errorCallback);
  • successCallback: callback opcional com dois parâmetros:

    • O número atual de bytes que o aplicativo está usando.
    • O número de bytes restantes na cota.
  • errorCallback: callback de erro opcional.

requestQuota

Pedir mais armazenamento. O navegador apresenta uma barra de informações para solicitar que o usuário conceda ou negue ao aplicativo para ter mais armazenamento.

 // you could also use it from webkitTemporaryStorage
navigator.webkitPersistentStorage.requestQuota (
      newQuotaInBytes,
      quotaCallback,
      errorCallback);
Parâmetros
  • newQuotaInBytes: a quantidade de bytes que você quer na cota de armazenamento.
  • successCallback: callback opcional que transmite a quantidade de bytes concedidos.
  • errorCallback: callback de erro opcional.

Desenvolvimento futuro

O plano é colocar todas as APIs de armazenamento off-line HTML5, incluindo IndexedDB, Cache de aplicativo, File System e outras APIs que possam ser especificadas na Cota API Management. Você pode gerenciar toda a alocação de armazenamento com ele.