Gestione dell'archiviazione offline HTML5

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

Questo documento introduce i concetti di base relativi ai tipi di spazio di archiviazione utilizzati in Chrome e descrive l'API Quota Management sperimentale, che consente di gestire la quota di spazio di archiviazione. Il documento presuppone che tu conosca già i concetti generali dell'archiviazione lato client e sappia come utilizzare le API offline.

Sommario

  1. Tipi di archiviazione
    1. Temporaneo
    2. Permanente
    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 più spazio di archiviazione
    3. Reimpostare 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 tra loro nella tabella riportata di seguito.

Archiviazione temporanea

L'archiviazione temporanea è uno spazio di archiviazione temporaneo disponibile per qualsiasi app web. Chrome concede automaticamente all'app spazio di archiviazione temporaneo, quindi non è necessario richiedere l'allocazione.

Condivisione del pool

Lo spazio di archiviazione temporaneo è condiviso tra tutte le app 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 è incluso 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 è di 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

Anche se puoi eseguire query sulla quantità di spazio di archiviazione disponibile per la tua app e sulla quantità di dati già archiviati per la tua app, non puoi richiedere ulteriore spazio di archiviazione temporaneo. Se un'app supera la quota allocata, viene visualizzato un errore.

Spazio di archiviazione in esaurimento

Una volta superata la quota di archiviazione per l'intero pool, vengono eliminati tutti i dati archiviati per l'host utilizzato meno di recente. Il browser, tuttavia, non elimina definitivamente i dati in LocalStorage e SessionStorage. Per i dati archiviati in altre API offline, il browser elimina i dati interamente e non in parte, in modo che i dati delle app non vengano danneggiati in modi imprevisti.

Poiché ogni app è limitata a un massimo del 20% del pool di archiviazione, è probabile che l'eliminazione venga eseguita solo se l'utente esegue attivamente più di cinque app offline che utilizzano ciascuna lo spazio di archiviazione massimo.

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

Archiviazione permanente

L'archiviazione permanente è spazio di archiviazione che rimane nel browser, a meno che l'utente non la cancelli definitivamente. È disponibile solo per le app che utilizzano l'API file system, ma prima o poi lo sarà anche 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 l'archiviazione utilizzando l'API Quota Management e l'utente deve concederti l'autorizzazione per utilizzare 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 all'archiviazione permanente, ma è disponibile solo per le app e le estensioni di Chrome (file .crx). Le dimensioni dello spazio di archiviazione illimitato sono limitate solo dalla disponibilità di 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 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 scoprire di più, consulta le rispettive guide per gli sviluppatori di 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.

È automatica e non deve essere richiesta.

Spazio di archiviazione permanente che deve essere richiesto tramite l'API Quota Management e concesso dagli utenti.

Spazio di archiviazione permanente per estensioni e app di Chrome.

È impostato nel file manifest e deve essere concesso dagli utenti.

Disponibilità

Tutte le app web.

Tutte le app web.Esclusivamente per le estensioni di Chrome e per le app web ospitate e installate.
AutorizzazioneNessuna. Puoi utilizzarlo senza richiederlo esplicitamente.

Devi richiedere ulteriore 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 mostra una barra delle informazioni che chiede all'utente di accettare o rifiutare la richiesta di spazio di archiviazione.

Tuttavia, se la quantità di quota richiesta è effettivamente inferiore all'allocazione attuale dell'app, non viene visualizzata 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 in occasione di richieste successive di aumento dello spazio di archiviazioneNon applicabile. Non puoi richiedere ulteriore spazio di archiviazione temporaneo.

Chrome chiede di nuovo all'utente.

 

Chrome non chiede all'utente dopo l'installazione, indipendentemente 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 chiedere esplicitamente uno spazio di archiviazione specifico.

0 MB Devi chiedere esplicitamente unlimitedStorage nel file manifest.

Se non specifichi i tuoi requisiti di spazio di archiviazione, Chrome assegna spazio di archiviazione all'app 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 di archiviazione fisso.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 (deprecato 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, introdotta in Chrome 13, puoi:

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 una query sulle dimensioni dello spazio di archiviazione in uso e sullo spazio disponibile rimanente per l'host, chiama queryUsageAndQuota() con il seguente codice:

  • Tipo di spazio di archiviazione che vuoi controllare
  • Richiamata riuscita

L'utilizzo riportato dall'API potrebbe non corrispondere alle dimensioni effettive dei dati utente, poiché ogni archiviazione potrebbe richiedere alcuni byte in più per archiviare i metadati. Inoltre, gli aggiornamenti dello stato possono ritardare, facendo sì che l'API non rifletta 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 richiedere lo stato dell'archiviazione permanente, sostituisci webkitStorageInfo.TEMPORARY con webkitStorageInfo.PERSISTENT. L'enum si trova anche nell'oggetto window (spazio dei nomi globale), quindi puoi utilizzare anche window.PERSISTENT e window.TEMPORARY.

Richiesta di altro spazio di archiviazione

Non è necessario richiedere ulteriore spazio di archiviazione temporaneo, in quanto l'allocazione è automatica e non è possibile superare il limite massimo (come descritto nella tabella).

Per l'archiviazione permanente per l'API file system, la quota predefinita è 0, quindi devi richiedere esplicitamente l'archiviazione per l'applicazione. Chiama requestQuota() con il seguente metodo:

  • Tipo di archiviazione
  • Dimensioni
  • Richiamata riuscita

A seconda della richiesta, si verifica quanto segue:

  • Se richiedi una quota maggiore, il browser presenta una barra delle informazioni all'utente e gli chiede di concedere o negare l'autorizzazione per aumentare la quota. In alcuni casi, la richiesta potrebbe essere rifiutata automaticamente e viene restituita la quota attuale o una quota inferiore.
  • Se la quantità di quota richiesta è inferiore all'allocazione attuale dell'app, non viene visualizzata alcuna richiesta.
  • Se richiedi più spazio di archiviazione di quanto 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. Quindi non preoccuparti di chiamare di nuovo il metodo.

Di seguito viene spiegato come richiedere più 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 esegui il test dello spazio di archiviazione nella tua app, ti consigliamo di cancellare i dati archiviati in modo da poter testare nuovamente la gestione della quota nell'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 a destra della selezione evidenziata.

Riferimento API

Questa sezione documenta i metodi dell'API Quota Management.

Costanti

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

CostanteValoreDescrizione
TEMPORARY0Archiviazione temporanea.
PERSISTENT1Archiviazione permanente.

Panoramica del metodo

queryUsageAndQuota
requestQuota

Metodi

queryUsageAndQuota

Verifica 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 di errore facoltativo.

requestQuota

Richiedi più spazio di archiviazione. Il browser presenta una barra delle informazioni per richiedere all'utente di concedere o negare all'app l'autorizzazione ad 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 includere nella quota di spazio di archiviazione.
  • successCallback: callback facoltativo che trasmette la quantità di byte concessi.
  • errorCallback: callback di errore facoltativo.

Sviluppo futuro

Il piano prevede l'inserimento di tutte le API di archiviazione offline HTML5, comprese IndexedDB, Application Cache, File System e altre API eventualmente specificate nell'API di gestione delle quote. Potrai gestire tutto l'allocazione dello spazio di archiviazione.