HTML5-Offlinespeicher verwalten

Mit HTML5 wurden viele Speicher-APIs eingeführt, mit denen Sie große Datenmengen lokal im Browser. Der für jede Anwendung zugewiesene Speicherplatz ist jedoch standardmäßig auf einige wenige Megabyte. Mit Google Chrome können Sie ein größeres Speicherkontingent anfordern, das über das bisherige Limit von 5 MB.

Dieses Dokument bietet eine Einführung in die grundlegenden Konzepte rund um die Speicherarten in Chrome und beschreibt die experimentelle API zur Kontingentverwaltung, mit der Sie Ihr Speicherkontingent verwalten können. Die wird angenommen, dass Sie bereits mit den allgemeinen Konzepten des clientseitigen wissen, wie man Offline-APIs verwendet.

Inhalt

  1. Speicherarten <ph type="x-smartling-placeholder">
      </ph>
    1. Temporär
    2. Dauerhaft
    3. Unbegrenzt
    4. Speichertypen vergleichen
  2. Kontingent verwalten <ph type="x-smartling-placeholder">
      </ph>
    1. Speichernutzung und Verfügbarkeit abfragen
    2. Mehr Speicherplatz anfordern
    3. Kontingent für Testzwecke zurücksetzen
  3. API-Referenz <ph type="x-smartling-placeholder">
      </ph>
    1. Konstanten
    2. Methodenübersicht
    3. Methoden
  4. Künftige Entwicklung

Speicherarten

In Google Chrome können Sie nach drei Arten von Speicher fragen:

Diese Speichertypen werden in den folgenden Abschnitten ausführlicher beschrieben und mit den einzelnen Speichertypen verglichen. in der Tabelle unten.

Temporärer Speicher

Temporärer Speicher ist ein vorübergehender Speicher, der für jede Webanwendung verfügbar ist. Chrome gibt automatisch des temporären Speichers Ihrer App, sodass Sie keine Zuweisung anfordern müssen.

Pool teilen

Der temporäre Speicher wird von allen Web-Apps gemeinsam genutzt, die im Browser ausgeführt werden. Der gemeinsame Pool kann bis zu 1/3 des verfügbaren Speicherplatzes ausmachen. Der bereits von Apps belegte Speicherplatz ist in der Berechnung des gemeinsamen Pools enthalten; Das heißt, die Berechnung basiert auf (available storage space + storage being used by apps) * .333

Jede App kann bis zu 20% des gemeinsamen Pools nutzen. Wenn beispielsweise der gesamte verfügbare Speicherplatz 60 GB, der gemeinsame Pool 20 GB und die Anwendung kann bis zu 4 GB haben. Dieser ergibt sich aus 20% (bis zu 4 GB) von 1/3 (bis zu 20 GB) des verfügbaren Speicherplatzes (60 GB).

Um mehr Speicherplatz bitten

Sie können den für Ihre App verfügbaren Speicherplatz und die Menge an Speicherplatz abfragen. von Daten, die bereits für Ihre App gespeichert sind, können Sie keinen zusätzlichen temporären Speicherplatz anfordern. Wenn eine App das zugewiesene Kontingent überschreitet, wird ein Fehler ausgegeben.

Kein Speicherplatz mehr verfügbar

Sobald das Speicherkontingent für den gesamten Pool überschritten ist, werden die gesamten der zuletzt verwendete Host gelöscht wird. Der Browser löscht jedoch keine Daten in LocalStorage und SessionStorage fest. Bei Daten, die in anderen Offline-APIs gespeichert sind, löscht der Browser die Daten vollständig und nicht damit App-Daten nicht unerwartet beschädigt werden.

Da jede App auf maximal 20% des Speicherpools beschränkt ist, erfolgt eine Löschung wahrscheinlich nur, wenn der Nutzer führt aktiv mehr als fünf Offline-Apps aus, die jeweils den maximalen Speicherplatz belegen.

Der verfügbare Speicherplatz kann jedoch sinken, wenn Nutzer weitere Dateien auf ihrer Festplatte hinzufügen. Wenn der Parameter der verfügbare Speicherplatz knapp wird (Denken Sie daran, dass der gemeinsame Pool nur die Hälfte des aktuellen verfügbaren Speicherplatzes Festplattenspeicher), löscht der Browser alle Daten, die für den am wenigsten verwendeten Host gespeichert sind.

Nichtflüchtiger Speicher

Nichtflüchtiger Speicher verbleibt im Browser, bis er vom Nutzer unwiderruflich entfernt wird. Es ist verfügbar Nur für Apps, die die File System API verwenden, später aber auch für andere Offline-APIs verfügbar sein werden wie IndexedDB und Application Cache.

Eine Anwendung kann ein größeres Kontingent für nichtflüchtigen Speicher als temporären Speicher haben, aber Sie müssen Fordern Sie Speicherplatz über die Quota Management API an und der Nutzer muss Ihnen die Berechtigung erteilen, Leerzeichen. In Chrome wird eine Infoleiste angezeigt, in der der Nutzer aufgefordert wird, mehr lokalen Speicherplatz für die App zu gewähren.

Unbegrenzter Speicherplatz

Unbegrenzter Speicherplatz ist vergleichbar mit nichtflüchtigem Speicher, ist aber nur für Chrome-Apps und (.crx-Dateien) verwendet werden. Die Größe des unbegrenzten Speicherplatzes ist nur durch die Verfügbarkeit von Speicherplatz begrenzt. auf der Festplatte des Nutzers. Du kannst die Berechtigung unlimitedStorage in der Manifestdatei für eine App oder Erweiterung Bei der Installation wird der Nutzer über die Berechtigungen informiert, die die App oder Erweiterung. Durch die Fortsetzung der Installation erteilt der Nutzer 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 und Erweiterungen.

Speichertypen vergleichen

In der folgenden Tabelle werden die Unterschiede zwischen den drei Speichertypen beschrieben.

 Temporärer SpeicherNichtflüchtiger SpeicherUnbegrenzter Speicherplatz
Allgemeine Beschreibung

Vorübergehender Speicher, der für jede Webanwendung verfügbar ist.

Sie erfolgt automatisch und muss nicht angefordert werden.

Permanenter Speicher, der über die Quota Management API angefordert und von Nutzern gewährt werden muss.

Dauerhafter Speicher für Chrome-Erweiterungen und -Apps.

Sie wird in der Manifestdatei festgelegt und muss von Nutzern erteilt werden.

Verfügbarkeit

Alle Web-Apps.

Alle Web-Apps.Das ist nur für Chrome-Erweiterungen sowie für gehostete und installierte Web-Apps verfügbar.
BerechtigungKeine. Sie können sie verwenden, ohne sie ausdrücklich anzufordern.

Sie müssen mehr Speicherplatz über die Quota Management API anfordern.

Sie können die Berechtigung unlimitedStorage in der Manifestdatei für die App oder Erweiterung anfordern.
Nutzererfahrung bei der ersten VerwendungFür den Nutzer nicht sichtbar. Die App läuft einfach.

In Chrome wird eine Infoleiste angezeigt, in der der Nutzer aufgefordert wird, die Speicheranfrage zu akzeptieren oder abzulehnen.

Liegt das angeforderte Kontingent jedoch unter dem aktuellen Kontingent der Anwendung, wird keine Aufforderung angezeigt. Das größere Kontingent bleibt erhalten.

Bei der Installation wird der Nutzer über die Berechtigungen informiert, die für die App oder Erweiterung erforderlich sind. Durch die Installation erteilt der Nutzer implizit die Berechtigung für alle Seiten, deren URLs in der Datei „manifest.json“ für Apps oder Erweiterungen aufgeführt sind.

Nutzerfreundlichkeit bei nachfolgenden Anfragen nach mehr SpeicherplatzNicht zutreffend. Sie können keinen zusätzlichen temporären Speicher anfordern.

Der Nutzer wird von Chrome noch einmal gefragt.

 

Chrome fordert den Nutzer nach der Installation nicht auf, auch wenn von der App oder Erweiterung ein höheres Kontingent angefordert wurde.
Persistenz von Daten

Vorübergehend. Die Daten können vom Browser gelöscht werden.

Dauerhaft. Der Browser löscht die Daten nur, wenn der Nutzer sie dazu auffordert. Daten sind bei nachfolgenden Zugriffen verfügbar.

Gehe nicht davon aus, dass die Daten dauerhaft sind, da der Nutzer sie löschen kann.

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 temporären Speicherpool zu.

Maximaler SpeicherplatzBis zu 20% des gemeinsamen Pools.So groß wie der verfügbare Speicherplatz auf der Festplatte. Es gibt keinen festen Speicherpool.So groß wie der verfügbare Speicherplatz auf der Festplatte.
Empfohlener AnwendungsfallCachingApps, die offline funktionieren oder viele Assets enthaltenApps, die für Google Chrome entwickelt wurden
APIs, die sie verwenden können

Offline-APIs

  • App-Cache
  • Dateisystem
  • IndexedDB
  • WebSQL (verworfen seit dem 18. November 2010)

Hinweis: Web Storage APIs wie LocalStorage und SessionStorage bleiben unveränderlich bei 5 MB.

Dateisystem-API

Offline-APIs

  • App-Cache
  • Dateisystem
  • IndexedDB
  • WebSQL (verworfen)

Hinweis: Web Storage APIs wie LocalStorage und SessionStorage bleiben unveränderlich bei 5 MB.

Kontingent verwalten

Mit der Quota Management API, die in Chrome 13 eingeführt wurde, haben Sie folgende Möglichkeiten:

Die API wird mit dem globalen Objekt window.webkitStorageInfo implementiert.

Die Referenzdokumentation finden Sie im nächsten Abschnitt.

Speichernutzung und -verfügbarkeit abfragen

Um die verwendete Speichergröße und den für den Host noch verfügbaren Speicher abzufragen, rufen Sie queryUsageAndQuota() durch folgenden Code:

  • Speichertyp, den Sie prüfen möchten
  • Erfolgreicher Callback

Die von der API gemeldete Nutzung stimmt möglicherweise nicht mit der tatsächlichen Größe der Nutzerdaten überein, da benötigt möglicherweise zusätzliche Byte, um die Metadaten zu speichern. Außerdem können sich Statusaktualisierungen verzögern, was dazu führt, API gibt nicht den aktuellen Speicherstatus wieder.

Das folgende Code-Snippet zeigt, wie Sie Speicherplatz anfordern 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 einfach webkitStorageInfo.TEMPORARY mit webkitStorageInfo.PERSISTENT. Die Aufzählung befindet sich ebenfalls in der window-Objekt (globaler Namespace), sodass Sie auch window.PERSISTENT und window.TEMPORARY

Mehr Speicherplatz wird angefordert

Sie müssen keinen zusätzlichen temporären Speicher anfordern, da die Zuweisung automatisch erfolgt und Sie über den Höchstwert hinaus (wie in der Tabelle beschrieben).

Für den nichtflüchtigen Speicher der File System API beträgt das Standardkontingent 0. Sie müssen sich also explizit Speicherplatz für Ihre Anwendung anfordern. Rufen Sie requestQuota() mit dem folgenden Befehl auf:

  • Speichertyp
  • Größe
  • Erfolgreicher Callback

Je nachdem, wonach Sie fragen, geschieht Folgendes:

  • Wenn Sie ein größeres Kontingent anfordern, zeigt der Browser dem Nutzer eine Infoleiste an, in der er aufgefordert wird, Berechtigungen für erhöhte Kontingente gewähren oder verweigern. In einigen Fällen kann die Anfrage ohne Ton abgelehnt und das aktuelle oder ein kleineres Kontingent wird zurückgegeben.
  • Wenn das angeforderte Kontingent unter dem aktuellen Kontingent der Anwendung liegt, wird keine Eingabeaufforderung angezeigt.
  • Wenn Sie mehr Speicherplatz anfordern, als zulässig ist, erhalten Sie eine Fehlermeldung (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.

Nachfolgend 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 App testen, können Sie die gespeicherten Daten löschen, um die Kontingentverwaltung in Ihrer App neu testen. Gehen Sie dazu so vor:

  1. Geben Sie chrome://settings/cookies in die Omnibox (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 dokumentiert.

Konstanten

Die folgenden webkitStorageInfo-Konstanten geben die Art des Speichers 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 von der Anwendung verwendet werden.
    • Die Anzahl der im Kontingent verbleibenden Byte.
  • errorCallback: Optionaler Fehler-Callback.

requestQuota

Fordern Sie mehr Speicherplatz an. Im Browser wird eine Infoleiste angezeigt, in der der Nutzer aufgefordert wird, der App die Verwendung um mehr Speicherplatz zu erhalten.

 // you could also use it from webkitTemporaryStorage
navigator.webkitPersistentStorage.requestQuota (
      newQuotaInBytes,
      quotaCallback,
      errorCallback);
Parameter
  • newQuotaInBytes: Die Menge der Byte, die Sie für Ihr Speicherkontingent benötigen.
  • successCallback: Optionaler Callback, der die Menge der gewährten Byte weitergibt.
  • errorCallback: Optionaler Fehler-Callback.

Zukünftige Entwicklung

Geplant ist die Implementierung aller HTML5-Offlinespeicher-APIs, einschließlich IndexedDB, Application Cache, File System-APIs und anderen APIs, die angegeben werden können (im Rahmen des Kontingents), Management API Sie können damit den gesamten Speicherplatz verwalten.