Gestione dell'archiviazione offline HTML5

HTML5 ha introdotto molte API di archiviazione che consentono di archiviare una grande quantità di dati localmente nel browser. Tuttavia, la quantità di spazio allocato per ogni app è, per impostazione predefinita, limitata a pochi megabyte. Google Chrome consente di richiedere una quota di spazio di archiviazione maggiore, oltre il limite precedente di appena 5 MB

Questo documento ti introduce ai concetti di base relativi ai tipi di archiviazione utilizzati in Chrome e descrive l'API sperimentale Quota Management, che consente di gestire la quota di spazio di archiviazione. La documento presuppone che tu abbia già familiarità con i concetti generali dello spazio di archiviazione lato client e sapere come usare le API offline.

Sommario

  1. Tipi di archiviazione
      .
    1. Temporaneo
    2. Persistente
    3. Illimitato
    4. Confronto tra i tipi di archiviazione
  2. Gestione della quota
      .
    1. Utilizzo e disponibilità dello spazio di archiviazione delle query
    2. Richiedere altro spazio di archiviazione
    3. Reimposta la quota per i test
  3. Riferimento API
      .
    1. Costanti
    2. Panoramica del metodo
    3. Metodi
  4. Sviluppo futuro

Tipi di archiviazione

In Google Chrome, puoi richiedere tre tipi di spazio di archiviazione:

Questi tipi di archiviazione sono descritti in maggiore dettaglio nelle sezioni seguenti e confrontati con ogni le altre nella tabella seguente.

Archiviazione temporanea

L'archiviazione temporanea è lo spazio di archiviazione temporaneo disponibile per qualsiasi app web. Chrome fornisce automaticamente spazio di archiviazione temporaneo dell'app, quindi non devi richiederne l'assegnazione.

Condividere la piscina

Lo spazio di archiviazione temporaneo è condiviso tra tutte le applicazioni web in esecuzione nel browser. Il pool condiviso può essere fino a 1/3 dello spazio su disco disponibile. Lo spazio di archiviazione già utilizzato dalle app è inclusi nel calcolo del pool condiviso; ovvero il calcolo si basa su (available storage space + storage being used by apps) * .333

Ogni app può avere fino al 20% del pool condiviso. Ad esempio, se lo spazio totale disponibile su disco 60 GB, il pool condiviso è di 20 GB e l'app può avere fino a 4 GB. Questo valore viene calcolato dal 20% (fino a 4 GB) di 1/3 (fino a 20 GB) dello spazio su disco disponibile (60 GB).

Richiesta di più spazio

È possibile però eseguire query sulla quantità di spazio di archiviazione disponibile per l'app e sulla quantità di dati già memorizzati per la tua app, non puoi richiedere altro spazio di archiviazione temporaneo. Se un'app la quota allocata, viene generato un errore.

Spazio di archiviazione in esaurimento

Una volta superata la quota di archiviazione per l'intero pool, tutti i dati archiviati per minimo l'host utilizzato di recente viene eliminato. Il browser, tuttavia, non eliminerà in modo definitivo i dati contenuti in LocalStorage e Archiviazionedi sessione. Per i dati archiviati in altre API offline, il browser elimina i dati nella loro interezza e non in parte per evitare che i dati delle app vengano danneggiati in modi imprevisti.

Poiché ogni app è limitata al massimo al 20% dello spazio di archiviazione del pool, è probabile che l'eliminazione avvenga solo se esegue attivamente più di cinque app offline che utilizzano ciascuna il massimo spazio di archiviazione.

Tuttavia, lo spazio di archiviazione disponibile può ridursi man mano che gli utenti aggiungono altri file sui propri dischi rigidi. Quando lo spazio disponibile su disco si riduce (ricorda che il pool condiviso riceve solo la metà dello spazio attuale disponibile spazio su disco), il browser elimina tutti i dati archiviati per l'host utilizzato meno di recente.

Archiviazione permanente

L'archiviazione permanente è l'archiviazione che rimane nel browser finché l'utente non la elimina definitivamente. È disponibile solo per le app che utilizzano l'API File System, ma che in futuro saranno disponibili per altre API offline come IndexedDB e Application Cache.

Un'applicazione può avere una quota maggiore per l'archiviazione permanente rispetto all'archiviazione temporanea, ma devi richiedere spazio di archiviazione utilizzando l'API di gestione delle quote e l'utente deve concederti l'autorizzazione per utilizzarne di più spazio. Chrome presenta una barra delle informazioni che chiede all'utente di concedere all'app più spazio di archiviazione locale.

Spazio di archiviazione illimitato

Lo spazio di archiviazione illimitato è simile allo spazio di archiviazione permanente, ma è disponibile solo per le app di Chrome e (file .crx). Le dimensioni dello spazio di archiviazione illimitato sono limitate solo dalla disponibilità dello spazio sul disco rigido dell'utente. Puoi chiedere l'autorizzazione unlimitedStorage nel file manifest per un'app o un'estensione. Al momento dell'installazione, l'utente viene informato delle autorizzazioni richieste l'app o l'estensione. Se procedi con l'installazione, l'utente concede implicitamente l'autorizzazione tutte le pagine i cui URL sono elencati nel file manifest.json.

Per scoprire di più, consulta le rispettive guide per gli sviluppatori relative ad app ed estensioni.

Confronto tra i tipi di archiviazione

La tabella seguente descrive le differenze tra i tre tipi di archiviazione.

 Archiviazione temporaneaArchiviazione permanenteSpazio di archiviazione illimitato
Descrizione di base

Spazio di archiviazione temporaneo disponibile per qualsiasi app web.

È automatico e non deve essere richiesto.

Archiviazione permanente che deve essere richiesta tramite l'API di gestione delle quote e concessa dagli utenti.

Archiviazione permanente per estensioni e app di Chrome.

Viene impostata nel file manifest e deve essere concessa dagli utenti.

Disponibilità

Tutte le app web.

Tutte le app web.Sono specifiche per le estensioni di Chrome e per le app web ospitate e installate.
AutorizzazioneNessuno. Puoi utilizzarlo senza richiederlo esplicitamente.

Devi richiedere più spazio di archiviazione utilizzando l'API Quota Management.

Puoi chiedere l'autorizzazione unlimitedStorage nel file manifest per l'app o l'estensione.
Esperienza utente al primo utilizzoInvisibile all'utente. L'app funziona.

Chrome visualizza una barra delle informazioni che chiede all'utente di accettare o rifiutare la richiesta di spazio di archiviazione.

Se, però, la quantità di quota richiesta è effettivamente inferiore all'allocazione attuale dell'app, non viene mostrata alcuna richiesta. La quota maggiore viene mantenuta.

Al momento dell'installazione, l'utente viene informato delle autorizzazioni richieste dall'app o dall'estensione. Se procedi con l'installazione, l'utente concede implicitamente l'autorizzazione per tutte le pagine i cui URL sono elencati nel file manifest.json per l'app o l'estensione.

Esperienza utente nelle richieste successive di aumento di spazio di archiviazioneNon applicabile. Non puoi richiedere ulteriore spazio di archiviazione temporaneo.

Chrome chiede di nuovo all'utente.

 

Chrome non avvisa l'utente dopo l'installazione, a prescindere dalle richieste di aumento della quota da parte dell'app o dell'estensione.
Persistenza dei dati

Temporaneo. Il browser può eliminare i dati.

Permanente. Il browser non elimina i dati a meno che l'utente non lo richieda. I dati sono disponibili negli accessi successivi.

Non dare per scontato che i dati siano permanenti perché l'utente può eliminarli.

Come l'archiviazione permanente.

 

Spazio di archiviazione predefinito

Fino al 20% del pool condiviso.

0 MB Devi richiedere esplicitamente uno spazio di archiviazione specifico.

0 MB Devi chiedere esplicitamente unlimitedStorage nel file manifest.

Se non specifichi i requisiti di archiviazione, Chrome alloca all'app lo spazio di archiviazione dal pool condiviso dello spazio di archiviazione temporaneo.

Spazio di archiviazione massimoFino al 20% del pool condiviso.Grande quanto lo spazio disponibile sul disco rigido. Non ha un pool fisso di spazio di archiviazione.Grande quanto lo spazio disponibile sul disco rigido.
Caso d'uso consigliatoMemorizzazione nella cache.App che funzionano offline o che hanno un numero elevato di asset.App progettate per essere eseguite in Google Chrome.
API che possono utilizzarlo

API offline

  • Cache app
  • File system
  • IndexedDB
  • WebSQL (ritirato dal 18 novembre 2010)

Nota:le API di archiviazione web come LocalStorage e SessionStorage rimangono fisse a 5 MB.

API File System

API offline

  • Cache app
  • File system
  • IndexedDB
  • WebSQL (deprecato)

Nota:le API di archiviazione web come LocalStorage e SessionStorage rimangono fisse a 5 MB.

Gestione della quota

Con l'API Quota Management, che è stata introdotta in Chrome 13, puoi fare quanto segue:

L'API è implementata con l'oggetto globale window.webkitStorageInfo.

Per la documentazione di riferimento, consulta la sezione successiva.

Esecuzione di query sull'utilizzo e sulla disponibilità dello spazio di archiviazione

Per eseguire query sulle dimensioni dello spazio di archiviazione in uso e sullo spazio disponibile rimanente per l'host, chiama queryUsageAndQuota() con quanto segue:

  • Tipo di spazio di archiviazione che vuoi controllare
  • Callback riuscito

L'utilizzo riportato dall'API potrebbe non corrispondere alle dimensioni effettive dei dati utente, poiché ogni spazio di archiviazione potrebbero richiedere alcuni byte extra per archiviare i relativi metadati. Inoltre, gli aggiornamenti dello stato possono subire ritardi, generando L'API non riflette lo stato di archiviazione più recente.

Il seguente snippet di codice mostra come chiedere informazioni sullo spazio di archiviazione:

// 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);  }
);

Se vuoi chiedere lo stato dell'archiviazione permanente, sostituisci webkitStorageInfo.TEMPORARY con webkitStorageInfo.PERSISTENT. L'enum è presente anche nella window (spazio dei nomi globale), quindi puoi anche utilizzare window.PERSISTENT e window.TEMPORARY.

Richiesta di altro spazio di archiviazione

Non è necessario richiedere ulteriore spazio di archiviazione temporaneo perché l'allocazione è automatica e oltre il limite massimo (come descritto nella tabella).

Per l'archiviazione permanente per l'API File System, la quota predefinita è 0, quindi devi specificare per richiedere spazio di archiviazione per la tua applicazione. Chiama requestQuota() con il seguente codice:

  • Tipo di archiviazione
  • Dimensioni
  • Callback riuscito

In base alla richiesta, si verifica quanto segue:

  • Se richiedi una quota maggiore, il browser presenta una barra delle informazioni all'utente e gli richiede di concedi o neghi l'autorizzazione per aumentare la quota. In alcuni casi, la richiesta potrebbe essere silenziosa viene rifiutata e viene restituita la quota corrente o una quota inferiore.
  • Se la quantità di quota richiesta è inferiore all'allocazione attuale dell'app, non viene mostrata alcuna richiesta.
  • Se richiedi più spazio di archiviazione di quello consentito, viene visualizzato un errore (QUOTA_EXCEEDED_ERR).
  • Se chiami di nuovo requestQuota() dopo che l'utente ha già concesso l'autorizzazione, non succederà nulla. Non preoccuparti di chiamare di nuovo il metodo.

Di seguito viene spiegato come richiedere altro spazio di archiviazione:

// 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); }
);
});

Reimpostazione della quota per i test

Quando testi lo spazio di archiviazione nella tua app, potrebbe essere opportuno cancellare i dati memorizzati per poter testare nuovamente la gestione delle quote nella tua app. Per farlo:

  1. Inserisci chrome://settings/cookies nella omnibox (la barra degli indirizzi).
  2. Cerca la tua app.
  3. Selezionare l'app.
  4. Fai clic sulla X sul lato destro della selezione evidenziata.

Riferimento API

Questa sezione illustra i metodi dell'API Quota Management.

Costanti

Di seguito sono riportate le costanti webkitStorageInfo, che indicano il tipo di archiviazione.

CostanteValoreDescrizione
TEMPORARY0Archiviazione temporanea.
PERSISTENT1Archiviazione persistente.

Panoramica dei metodi

queryUsageAndQuota
requestQuota

Metodi

queryUsageAndQuota

Controlla le dimensioni dello spazio di archiviazione in uso e lo spazio disponibile rimanente per l'host.

 // you could also use it from webkitPersistentStorage
navigator.webkitTemporaryStorage.queryUsageAndQuota(
      successCallback,
      errorCallback);
  • successCallback: callback facoltativo con due parametri:

    • Il numero attuale di byte utilizzati dall'app.
    • Il numero di byte rimasti nella quota.
  • errorCallback: callback facoltativo per l'errore.

requestQuota

Richiedi altro spazio di archiviazione. Il browser presenta una barra delle informazioni per chiedere all'utente di concedere o negare all'app per avere più spazio di archiviazione.

 // you could also use it from webkitTemporaryStorage
navigator.webkitPersistentStorage.requestQuota (
      newQuotaInBytes,
      quotaCallback,
      errorCallback);
Parametri
  • newQuotaInBytes: la quantità di byte che vuoi rientrare nella quota di spazio di archiviazione.
  • successCallback: callback facoltativo che trasmette la quantità di byte concessi.
  • errorCallback: callback facoltativo per l'errore.

Sviluppo futuro

Il piano prevede di collocare tutte le API di archiviazione offline HTML5, tra cui IndexedDB, cache applicazioni, file di sistema e altre API che potrebbero essere specificate, nel campo l'API di gestione. Potrai gestire l'intero spazio di archiviazione allocato.