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
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 temporanea | Archiviazione permanente | Spazio 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. |
Autorizzazione | Nessuno. 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 utilizzo | Invisibile 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 archiviazione | Non 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 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 massimo | Fino 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 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, che è stata introdotta in Chrome 13, puoi fare quanto segue:
- Utilizzo e disponibilità dello spazio di archiviazione delle query
- Richiedere altro spazio di archiviazione
- Reimposta 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 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:
- Inserisci
chrome://settings/cookies
nella omnibox (la barra degli indirizzi). - Cerca la tua app.
- Selezionare l'app.
- 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.
Costante | Valore | Descrizione |
---|---|---|
TEMPORARY | 0 | Archiviazione temporanea. |
PERSISTENT | 1 | Archiviazione 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.