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
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 temporanea | Archiviazione permanente | Spazio 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. |
Autorizzazione | Nessuna. 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 utilizzo | Invisibile 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 archiviazione | Non 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 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 massimo | Fino 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 consigliato | Memorizzazione 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
Nota:le API di archiviazione web come LocalStorage e SessionStorage rimangono fisse a 5 MB. | API file system | API offline
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:
- Utilizzo e disponibilità dello spazio di archiviazione delle query
- Richiedere più spazio di archiviazione
- Reimpostare la quota per i test
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:
- Inserisci
chrome://settings/cookies
nella omnibox (la barra degli indirizzi). - Cerca la tua app.
- Selezionare l'app.
- 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.
Costante | Valore | Descrizione |
---|---|---|
TEMPORARY | 0 | Archiviazione temporanea. |
PERSISTENT | 1 | Archiviazione 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.