HTML5-Offlinespeicher verwalten

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

  1. Speichertypen
    1. Temporär
    2. Dauerhaft
    3. Unbegrenzt
    4. Speichertypen im Vergleich
  2. Kontingent verwalten
    1. Speichernutzung und -verfügbarkeit abfragen
    2. Mehr Speicherplatz anfordern
    3. Kontingent zum Testen zurücksetzen
  3. API-Referenz
    1. Konstanten
    2. Methodenübersicht
    3. Methoden
  4. Künftige Entwicklung

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 SpeicherNichtflüchtiger SpeicherUnbegrenzter 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.
BerechtigungKeine. 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 VerwendungFü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 SpeicherplatzNicht 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 unlimitedStorage fragen.

Wenn Sie Ihre Speicheranforderungen nicht angeben, weist Chrome der App Speicher aus dem gemeinsamen Pool des temporären Speichers zu.

Maximaler SpeicherplatzBis 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 AnwendungsfallCachingApps, 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

  • Anwendungscache
  • Dateisystem
  • IndexedDB
  • WebSQL (seit 18. November 2010 eingestellt)

Hinweis:Web Storage-APIs wie LocalStorage und SessionStorage bleiben fest bei 5 MB.

Dateisystem-API

Offline-APIs

  • Anwendungscache
  • Dateisystem
  • IndexedDB
  • WebSQL (eingestellt)

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:

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:

  1. Geben Sie chrome://settings/cookies in die Omnibox (die Adressleiste) ein.
  2. Suchen Sie nach Ihrer App.
  3. Wählen Sie Ihre App aus.
  4. 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.

KonstanteWertBeschreibung
TEMPORARY0Temporärer Speicher.
PERSISTENT1Nichtflü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.