Mit HTML5 wurden viele Speicher-APIs eingeführt, mit denen Sie große Datenmengen lokal in den Browsern Ihrer Nutzer speichern können. Der Speicherplatz, der jeder Anwendung zugewiesen wird, ist jedoch standardmäßig auf einige Megabyte beschränkt. In Google Chrome können Sie ein größeres Speicherkontingent anfordern, das über das bisherige Limit von nur 5 MB hinausgeht.
In diesem Dokument werden die grundlegenden Konzepte der in Chrome verwendeten Speichertypen vorgestellt. Außerdem wird die experimentelle Quota Management API beschrieben, mit der Sie Ihr Speicherkontingent verwalten können. In diesem Dokument wird davon ausgegangen, dass Sie bereits mit den allgemeinen Konzepten des clientseitigen Speicherns vertraut sind und wissen, wie Offline-APIs verwendet werden.
Inhalt
Speicherarten
In Google Chrome können Sie drei Arten von Speicherplatz anfordern:
Diese Speichertypen werden in den folgenden Abschnitten ausführlicher beschrieben und in der folgenden Tabelle miteinander verglichen.
Temporärer Speicher
Temporärer Speicher ist ein vorübergehender Speicher, der für jede Webanwendung zur Verfügung steht. Chrome erteilt Ihrer Anwendung automatisch temporären Speicher, sodass Sie keine Zuweisung anfordern müssen.
Pool teilen
Der temporäre Speicher wird von allen im Browser ausgeführten Web-Apps gemeinsam genutzt.
Der gemeinsam genutzte Pool kann bis zu 1/3 des verfügbaren Speicherplatzes ausmachen. Der bereits von Anwendungen verwendete Speicherplatz wird in die Berechnung des gemeinsamen Pools einbezogen, d. h. die Berechnung basiert auf (available storage space + storage being used by apps) * .333
.
Jede App kann bis zu 20% des gemeinsamen Speichers nutzen. Wenn der insgesamt verfügbare Speicherplatz beispielsweise 60 GB beträgt, beträgt der gemeinsame Pool 20 GB und die Anwendung kann bis zu 4 GB haben. Dies ergibt sich aus 20% (bis zu 4 GB) von 1/3 (bis zu 20 GB) des verfügbaren Speicherplatzes (60 GB).
Mehr Platz
Sie können zwar den für Ihre App verfügbaren Speicherplatz und die bereits für Ihre App gespeicherte Datenmenge abfragen, aber Sie können keinen zusätzlichen temporären Speicherplatz anfordern. Wenn eine App das zugewiesene Kontingent überschreitet, wird ein Fehler ausgegeben.
Zu wenig Speicherplatz
Sobald das Speicherkontingent für den gesamten Pool überschritten wird, werden alle Daten gelöscht, die für den am wenigsten verwendeten Host gespeichert sind. Die Daten in LocalStorage und SessionStorage werden vom Browser jedoch nicht unwiderruflich entfernt. Bei Daten, die in anderen Offline-APIs gespeichert sind, löscht der Browser die Daten vollständig und nicht teilweise, damit die App-Daten nicht auf unerwartete Weise beschädigt werden.
Da jede Anwendung auf maximal 20% des Speicherpools beschränkt ist, wird wahrscheinlich nur gelöscht, wenn der Nutzer mehr als fünf Offline-Apps aktiv ausführt, die jeweils den maximalen Speicherplatz belegen.
Der verfügbare Speicherplatz kann jedoch sinken, wenn Nutzer mehr Dateien auf ihren Festplatten hinzufügen. Wenn der verfügbare Speicherplatz knapp wird (der gemeinsam genutzte Pool erhält nur die Hälfte des aktuell verfügbaren Speicherplatzes), löscht der Browser alle Daten, die für den am wenigsten verwendeten Host gespeichert sind.
Nichtflüchtiger Speicher
Nichtflüchtiger Speicher ist Speicher, der im Browser verbleibt, bis der Nutzer ihn unwiderruflich entfernt. Sie ist nur für Apps verfügbar, die die File System API verwenden, wird aber irgendwann auch für andere Offline-APIs wie IndexedDB und Application Cache verfügbar sein.
Eine Anwendung kann ein größeres Kontingent für nichtflüchtigen Speicher als temporärer Speicher haben, aber Sie müssen Speicher über die Quota Management API anfordern und der Nutzer muss Ihnen die Berechtigung erteilen, mehr Speicherplatz zu verwenden. In Chrome wird eine Infoleiste eingeblendet, in der der Nutzer aufgefordert wird, der App mehr lokalen Speicherplatz zu gewähren.
Unbegrenzter Speicher
Unbegrenzter Speicher ähnelt dem nichtflüchtigen Speicher, ist jedoch nur für Chrome-Anwendungen und -Erweiterungen (CRX-Dateien) verfügbar. Die Größe des unbegrenzten Speichers ist nur durch den verfügbaren Speicherplatz auf der Festplatte des Nutzers begrenzt. Sie können die Berechtigung unlimitedStorage
in der Manifestdatei für eine App oder Erweiterung anfordern. Bei der Installation wird der Nutzer über die für die App oder Erweiterung erforderlichen Berechtigungen informiert. Wenn der Nutzer mit der Installation fortfährt, erteilt er implizit die Berechtigung für alle Seiten, deren URLs in der Datei „manifest.json“ aufgeführt sind.
Weitere Informationen finden Sie in den jeweiligen Entwicklerleitfäden für Apps bzw. Erweiterungen.
Speichertypen im Vergleich
In der folgenden Tabelle werden die Unterschiede zwischen den drei Speichertypen beschrieben.
Temporärer Speicher | Nichtflüchtiger Speicher | Unbegrenzter Speicher | |
---|---|---|---|
Allgemeine Beschreibung | Vorübergehender Speicher, der für jede Webanwendung verfügbar ist. Dies erfolgt automatisch und muss nicht angefordert werden. | Dauerhafte Speicherung, die über die Quota Management API angefordert und von Nutzern gewährt werden muss. | Permanenter Speicher für Chrome-Erweiterungen und -Apps Sie wird in der Manifestdatei festgelegt und muss von Nutzern gewährt werden. |
Verfügbarkeit | Alle Web-Apps. | Alle Web-Apps. | Nur für Chrome-Erweiterungen sowie für gehostete und installierte Web-Apps. |
Berechtigung | Keine. Sie können sie verwenden, ohne sie explizit anzufordern. | Sie müssen über die Quota Management API mehr Speicherplatz anfordern. | Die Berechtigung unlimitedStorage können Sie in der Manifestdatei für die App oder Erweiterung anfordern. |
Nutzererfahrung bei der ersten Verwendung | Für Nutzer nicht sichtbar. Die App wird einfach ausgeführt. | In Chrome wird eine Infoleiste eingeblendet, in der der Nutzer aufgefordert wird, die Speicheranforderung zu akzeptieren oder abzulehnen. Wenn das angeforderte Kontingent jedoch geringer ist als das aktuelle Kontingent der App, wird keine Aufforderung angezeigt. Das größere Kontingent wird beibehalten. | Bei der Installation wird der Nutzer über die für die App oder Erweiterung erforderlichen Berechtigungen informiert. Durch die Fortsetzung der Installation erteilt der Nutzer implizit die Berechtigung für alle Seiten, deren URLs in der Datei „manifest.json“ für die App oder Erweiterung aufgeführt sind. |
Nutzerfreundlichkeit bei nachfolgenden Anfragen nach mehr Speicherplatz | Nicht zutreffend. Sie können keinen zusätzlichen temporären Speicher anfordern. | Chrome fordert den Nutzer noch einmal auf.
| Chrome fordert den Nutzer nach der Installation nicht auf, unabhängig davon, ob die App oder Erweiterung ein höheres Kontingent angefordert hat. |
Persistenz von Daten | Vorübergehend. Der Browser kann die Daten löschen. | Dauerhaft. Der Browser löscht die Daten nur, wenn der Nutzer ihn dazu anweist. Die Daten sind bei nachfolgenden Zugriffen verfügbar. Gehen Sie nicht davon aus, dass die Daten dauerhaft sind, da Nutzer sie löschen können. | Entspricht dem nichtflüchtigen Speicher.
|
Standardspeicherplatz | Bis zu 20% des gemeinsamen Pools. | 0 MB. Sie müssen explizit nach einem bestimmten Speicherplatz fragen. | 0 MB. Du musst in der Manifestdatei explizit nach Wenn Sie Ihre Speicheranforderungen nicht angeben, weist Chrome der App Speicher aus dem gemeinsamen Pool des temporären Speichers zu. |
Maximaler Speicherplatz | Bis zu 20% des gemeinsamen Pools. | Die Größe entspricht dem verfügbaren Speicherplatz auf der Festplatte. Es gibt keinen festen Speicherpool. | Die Größe entspricht dem verfügbaren Speicherplatz auf der Festplatte. |
Empfohlener Anwendungsfall | Caching | Apps, die offline funktionieren oder eine große Anzahl an Assets haben. | Apps, die für die Ausführung in Google Chrome entwickelt wurden. |
APIs, die sie verwenden können | Offline-APIs
Hinweis:Web Storage-APIs wie LocalStorage und SessionStorage bleiben fest bei 5 MB. | Dateisystem-API | Offline-APIs
Hinweis:Web Storage-APIs wie LocalStorage und SessionStorage bleiben fest bei 5 MB. |
Kontingent verwalten
Mit der in Chrome 13 eingeführten Quota Management API können Sie Folgendes tun:
- Speichernutzung und -verfügbarkeit abfragen
- Mehr Speicherplatz anfordern
- Kontingent zum Testen zurücksetzen
Die API wird mit dem globalen Objekt window.webkitStorageInfo
implementiert.
Die Referenzdokumentation finden Sie im nächsten Abschnitt.
Speichernutzung und -verfügbarkeit abfragen
Rufen Sie queryUsageAndQuota()
mit folgendem Befehl auf, um die verwendete Speichergröße und den verfügbaren Speicherplatz für den Host abzufragen:
- Speichertyp, den Sie prüfen möchten
- Erfolgreicher Rückruf
Die von der API gemeldete Nutzung stimmt möglicherweise nicht mit der tatsächlichen Größe der Nutzerdaten überein, da jeder Speicher möglicherweise zusätzliche Byte benötigt, um seine Metadaten zu speichern. Außerdem können Statusaktualisierungen verzögern, sodass die API nicht den neuesten Speicherstatus widerspiegelt.
Das folgende Code-Snippet zeigt, wie Sie nach Speicherplatz fragen können:
// 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); }
);
Wenn Sie den Status des nichtflüchtigen Speichers abfragen möchten, ersetzen Sie webkitStorageInfo.TEMPORARY
einfach durch webkitStorageInfo.PERSISTENT
. Enum ist auch im Objekt window
(globaler Namespace), sodass Sie auch window.PERSISTENT
und window.TEMPORARY
verwenden können.
Mehr Speicherplatz wird angefordert
Sie müssen nicht mehr temporärer Speicher anfordern, da die Zuweisung automatisch erfolgt und Sie das in der Tabelle beschriebene Höchstlimit nicht überschreiten können.
Für nichtflüchtigen Speicher für die File System API beträgt das Standardkontingent 0. Sie müssen also explizit Speicher für Ihre Anwendung anfordern. Rufen Sie requestQuota()
mit folgendem Befehl auf:
- Speichertyp
- Größe
- Erfolgreicher Rückruf
Je nachdem, wonach Sie fragen, geschieht Folgendes:
- Wenn Sie ein größeres Kontingent anfordern, zeigt der Browser dem Nutzer eine Infoleiste an und fordert ihn auf, die Berechtigung für ein höheres Kontingent zu gewähren oder zu verweigern. In einigen Fällen wird die Anfrage möglicherweise ohne Rückmeldung abgelehnt und das aktuelle oder kleinere Kontingent wird zurückgegeben.
- Wenn das angeforderte Kontingent unter dem aktuellen Kontingent der App liegt, wird keine Eingabeaufforderung angezeigt.
- Wenn Sie mehr Speicherplatz anfordern als zulässig, wird eine Fehlermeldung angezeigt (
QUOTA_EXCEEDED_ERR
). - Wenn Sie
requestQuota()
noch einmal aufrufen, nachdem der Nutzer die Berechtigung bereits erteilt hat, passiert nichts. Rufen Sie die Methode also nicht noch einmal auf.
Im Folgenden sehen Sie, wie Sie mehr Speicherplatz anfordern können:
// 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); }
);
});
Kontingent für Tests zurücksetzen
Wenn Sie den Speicher in Ihrer Anwendung testen, sollten Sie die gespeicherten Daten löschen, damit Sie die Kontingentverwaltung in Ihrer Anwendung neu testen können. Gehen Sie dazu so vor:
- Geben Sie
chrome://settings/cookies
in die Omnibox (die Adressleiste) ein. - Suchen Sie nach Ihrer App.
- Wählen Sie Ihre App aus.
- Klicken Sie rechts neben der markierten Auswahl auf das X.
API-Referenz
In diesem Abschnitt werden die Methoden der Quota Management API beschrieben.
Konstanten
Die folgenden webkitStorageInfo
-Konstanten geben den Speichertyp an.
Konstante | Wert | Beschreibung |
---|---|---|
TEMPORARY | 0 | Temporärer Speicher. |
PERSISTENT | 1 | Nichtflüchtiger Speicher. |
Methodenübersicht
queryUsageAndQuota |
requestQuota |
Methoden
queryUsageAndQuota
Prüfen Sie die verwendete Speichergröße und den verfügbaren Speicherplatz für den Host.
// you could also use it from webkitPersistentStorage
navigator.webkitTemporaryStorage.queryUsageAndQuota(
successCallback,
errorCallback);
successCallback
: Optionaler Callback mit zwei Parametern:- Die aktuelle Anzahl von Byte, die die Anwendung verwendet.
- Die Anzahl der im Kontingent verbleibenden Byte.
errorCallback
: Optionaler Fehler-Callback.
requestQuota
Fordern Sie mehr Speicherplatz an. Der Browser zeigt eine Infoleiste an, in der der Nutzer aufgefordert wird, der App die Berechtigung zu erteilen oder zu verweigern, mehr Speicher zu erhalten.
// you could also use it from webkitTemporaryStorage
navigator.webkitPersistentStorage.requestQuota (
newQuotaInBytes,
quotaCallback,
errorCallback);
Parameter
newQuotaInBytes
: Die gewünschte Menge von Byte für Ihr Speicherkontingent.successCallback
: Optionaler Callback, der die Menge der gewährten Byte übergibt.errorCallback
: Optionaler Fehler-Callback.
Zukünftige Entwicklung
Es ist geplant, alle HTML5-Offlinespeicher-APIs – einschließlich IndexedDB, Application Cache, File System und anderer APIs, die angegeben werden – unter der Quota Management API zu platzieren. Sie können damit die gesamte Speicherplatzbelegung verwalten.