HTML5 offline opslag beheren

HTML5 heeft veel opslag-API's geïntroduceerd waarmee u een grote hoeveelheid gegevens lokaal in de browsers van uw gebruikers kunt opslaan. Maar de hoeveelheid ruimte die voor elke app wordt toegewezen, is standaard beperkt tot enkele megabytes. Met Google Chrome kunt u een groter opslagquotum aanvragen, bovenop de vorige limiet van slechts 5 MB.

In dit document maakt u kennis met de basisconcepten rond de typen opslag die in Chrome worden gebruikt en wordt de experimentele Quota Management API beschreven, waarmee u uw opslagquota kunt beheren. In het document wordt ervan uitgegaan dat u al bekend bent met de algemene concepten van opslag aan de clientzijde en weet hoe u offline API's moet gebruiken.

Inhoud

  1. Soorten opslag
    1. Tijdelijk
    2. Volhardend
    3. Onbeperkt
    4. Opslagtypen vergelijken
  2. Beheer uw quotum
    1. Vraag opslaggebruik en -beschikbaarheid op
    2. Vraag om meer opslagruimte
    3. Quota voor testen opnieuw instellen
  3. API-referentie
    1. Constanten
    2. Methode overzicht
    3. Methoden
  4. Toekomstige ontwikkeling

Soorten opslag

In Google Chrome kunt u om drie soorten opslag vragen:

Deze opslagtypen worden in de volgende paragrafen nader beschreven en in onderstaande tabel met elkaar vergeleken.

Tijdelijke opslag

Tijdelijke opslag is tijdelijke opslag die beschikbaar is voor elke web-app. Chrome geeft uw app automatisch tijdelijke opslagruimte, u hoeft dus geen toewijzing aan te vragen.

Het zwembad delen

Tijdelijke opslag wordt gedeeld door alle webapps die in de browser worden uitgevoerd. De gedeelde pool kan maximaal 1/3 van de beschikbare schijfruimte in beslag nemen. Opslag die al door apps wordt gebruikt, wordt meegenomen in de berekening van de gedeelde pool; dat wil zeggen dat de berekening is gebaseerd op (available storage space + storage being used by apps) * .333 .

Elke app kan maximaal 20% van de gedeelde pool bezitten. Als de totale beschikbare schijfruimte bijvoorbeeld 60 GB bedraagt, is de gedeelde pool 20 GB en kan de app maximaal 4 GB bevatten. Dit wordt berekend vanaf 20% (tot 4 GB) van 1/3 (tot 20 GB) van de beschikbare schijfruimte (60 GB).

Vraagt ​​om meer ruimte

Hoewel u kunt opvragen hoeveel opslagruimte er voor uw app beschikbaar is en hoeveel gegevens er al voor uw app zijn opgeslagen, kunt u niet om meer tijdelijke opslagruimte vragen. Als een app het toegewezen quotum overschrijdt, wordt er een fout gegenereerd.

Geen opslagruimte meer

Zodra het opslagquotum voor de hele pool wordt overschreden, worden alle gegevens die zijn opgeslagen voor de minst recent gebruikte host verwijderd. De browser zal de gegevens in LocalStorage en SessionStorage echter niet verwijderen. Voor gegevens die zijn opgeslagen in andere offline API's verwijdert de browser de gegevens geheel en niet gedeeltelijk, zodat app-gegevens niet op onverwachte manieren beschadigd raken.

Omdat elke app beperkt is tot maximaal 20% van de opslagpool, is verwijdering waarschijnlijk alleen mogelijk als de gebruiker actief meer dan vijf offline apps gebruikt die elk de maximale opslagruimte gebruiken.

De beschikbare opslagruimte kan echter kleiner worden naarmate gebruikers meer bestanden op hun harde schijf plaatsen. Wanneer de beschikbare schijfruimte krap wordt (denk eraan dat de gedeelde pool slechts de helft van de huidige beschikbare schijfruimte krijgt), verwijdert de browser alle gegevens die zijn opgeslagen voor de minst recent gebruikte host.

Persistente opslag

Persistente opslag is opslag die in de browser blijft staan, tenzij de gebruiker deze verwijdert. Het is alleen beschikbaar voor apps die de File System API gebruiken, maar zal uiteindelijk ook beschikbaar zijn voor andere offline API's zoals IndexedDB en Application Cache.

Een applicatie kan een groter quotum hebben voor permanente opslag dan voor tijdelijke opslag, maar u moet opslag aanvragen met behulp van de Quota Management API en de gebruiker moet u toestemming geven om meer ruimte te gebruiken. Chrome presenteert een informatiebalk waarin de gebruiker wordt gevraagd de app meer lokale opslagruimte te verlenen.

Onbeperkte opslag

Onbeperkte opslag is vergelijkbaar met permanente opslag, maar is alleen beschikbaar voor Chrome-apps en -extensies (.crx-bestanden). De grootte van onbeperkte opslag wordt alleen beperkt door de beschikbaarheid van ruimte op de harde schijf van de gebruiker. U kunt om de toestemming unlimitedStorage vragen in het manifestbestand voor een app of extensie . Bij de installatie wordt de gebruiker geïnformeerd over de vereiste rechten voor de app of extensie. Door door te gaan met de installatie verleent de gebruiker impliciet toestemming voor alle pagina's waarvan de URL's worden vermeld in het bestand manifest.json.

Raadpleeg voor meer informatie de respectievelijke handleidingen voor ontwikkelaars voor apps en extensies .

Opslagtypen vergelijken

De volgende tabel beschrijft de verschillen tussen de drie soorten opslag.

Tijdelijke opslag Persistente opslag Onbeperkte opslag
Basisbeschrijving

Tijdelijke opslag die beschikbaar is voor elke web-app.

Het gebeurt automatisch en hoeft niet te worden aangevraagd.

Permanente opslag die moet worden aangevraagd via de Quota Management API en moet worden verleend door gebruikers.

Permanente opslag voor Chrome-extensies en apps.

Het wordt ingesteld in het manifestbestand en moet door gebruikers worden verleend.

Beschikbaarheid

Alle webapps.

Alle webapps. Uniek voor Chrome-extensies en voor gehoste en geïnstalleerde webapps .
Toestemming Geen. U kunt er gebruik van maken zonder er expliciet om te vragen.

U moet meer opslagruimte aanvragen met behulp van de Quota Management API.

U kunt om de toestemming unlimitedStorage vragen in het manifestbestand voor de app of extensie .
Gebruikerservaring bij het eerste gebruik Onzichtbaar voor de gebruiker. De app werkt gewoon.

Chrome geeft een informatiebalk weer waarin de gebruiker wordt gevraagd het opslagverzoek te accepteren of af te wijzen.

Maar als het door u aangevraagde quotumbedrag feitelijk kleiner is dan de huidige toewijzing van de app, wordt er geen prompt weergegeven. Het grotere quotum blijft behouden.

Bij de installatie wordt de gebruiker geïnformeerd over de vereiste rechten voor de app of extensie. Door door te gaan met de installatie verleent de gebruiker impliciet toestemming voor alle pagina's waarvan de URL's worden vermeld in het manifest.json-bestand voor app of extensie .

Gebruikerservaring bij volgende verzoeken om meer opslag Niet toepasbaar. U kunt niet om meer tijdelijke opslag vragen.

Chrome vraagt ​​de gebruiker opnieuw.

Chrome vraagt ​​de gebruiker na de installatie niet, ongeacht de verzoeken om verhoogde quota door de app of extensie.
Persistentie van gegevens

Vergankelijk. De browser kan de gegevens verwijderen.

Volhardend. De browser verwijdert de gegevens niet, tenzij de gebruiker daartoe opdracht geeft. Gegevens zijn beschikbaar bij volgende toegangen.

Ga er niet vanuit dat de gegevens permanent zijn, want de gebruiker kan deze verwijderen.

Hetzelfde als permanente opslag.

Standaard opslagruimte

Tot 20% van het gedeelde zwembad.

0MB. U dient expliciet om een ​​specifieke opslagruimte te vragen.

0MB. U moet expliciet om unlimitedStorage vragen in het manifestbestand.

Als u uw opslagvereisten niet opgeeft, wijst Chrome opslag aan de app toe vanuit de gedeelde pool van tijdelijke opslag.

Maximale opslagruimte Tot 20% van het gedeelde zwembad. Zo groot als de beschikbare ruimte op de harde schijf. Het heeft geen vaste opslagpool. Zo groot als de beschikbare ruimte op de harde schijf.
Aanbevolen gebruiksscenario Caching. Apps die offline werken of een groot aantal assets hebben. Apps die zijn ontworpen om te worden uitgevoerd in Google Chrome.
API's die er gebruik van kunnen maken

Offline API's

  • App-cache
  • Bestandssysteem
  • GeïndexeerdeDB
  • WebSQL ( verouderd sinds 18 november 2010)

Opmerking: API's voor webopslag zoals LocalStorage en SessionStorage blijven vast op 5 MB.

Bestandssysteem-API

Offline API's

  • App-cache
  • Bestandssysteem
  • GeïndexeerdeDB
  • WebSQL (verouderd)

Opmerking: API's voor webopslag zoals LocalStorage en SessionStorage blijven vast op 5 MB.

Beheer uw quotum

Met de Quota Management API, geïntroduceerd in Chrome 13, kun je het volgende doen:

De API wordt geïmplementeerd met het globale object window.webkitStorageInfo .

Zie de volgende sectie voor de referentiedocumentatie.

Opslaggebruik en -beschikbaarheid opvragen

Om de opslaggrootte die wordt gebruikt en de beschikbare ruimte voor de host op te vragen, roept u queryUsageAndQuota() aan met het volgende:

  • Type opslag dat u wilt controleren
  • Succes terugbellen

Het door de API gerapporteerde gebruik komt mogelijk niet overeen met de werkelijke grootte van de gebruikersgegevens, omdat elke opslag mogelijk wat extra bytes nodig heeft om de metagegevens op te slaan. Bovendien kunnen statusupdates achterblijven, waardoor de API niet de meest recente opslagstatus weergeeft.

Het volgende codefragment laat zien hoe u vragen kunt stellen over opslagruimte:

// 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);  }
);

Als u de status van permanente opslag wilt opvragen, vervangt u eenvoudigweg webkitStorageInfo.TEMPORARY door webkitStorageInfo.PERSISTENT . De enum bevindt zich ook in het window object (algemene naamruimte), dus u kunt ook window.PERSISTENT en window.TEMPORARY gebruiken.

Vraagt ​​om meer opslagruimte

U hoeft niet om meer tijdelijke opslag te vragen, aangezien de toewijzing automatisch gebeurt en u niet verder kunt komen dan de maximale limiet (zoals beschreven in de tabel ).

Voor permanente opslag voor File System API is het standaardquotum 0, dus u moet expliciet opslag voor uw toepassing aanvragen. Roep requestQuota() aan met het volgende:

  • Soort opslag
  • Maat
  • Succes terugbellen

Afhankelijk van wat u vraagt, gebeurt het volgende:

  • Als u om een ​​groter quotum vraagt, presenteert de browser een informatiebalk aan de gebruiker en wordt hem gevraagd toestemming voor een verhoogd quotum te verlenen of te weigeren. In sommige gevallen kan het verzoek stilzwijgend worden afgewezen en wordt het huidige quotum of een kleiner quotum geretourneerd.
  • Als het door u aangevraagde quotumbedrag kleiner is dan de huidige toewijzing van de app, wordt er geen prompt weergegeven.
  • Als u om meer opslagruimte vraagt ​​dan is toegestaan, krijgt u een foutmelding ( QUOTA_EXCEEDED_ERR ).
  • Als u requestQuota() opnieuw aanroept nadat de gebruiker al toestemming heeft verleend, gebeurt er niets. Dus doe geen moeite om de methode opnieuw aan te roepen.

Hieronder ziet u hoe u om meer opslagruimte kunt vragen:

// 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); }
);
});

Quota voor testen opnieuw instellen

Wanneer u de opslag in uw app test, wilt u wellicht de opgeslagen gegevens wissen, zodat u het quotabeheer opnieuw kunt testen in uw app. Om dit te doen:

  1. Voer chrome://settings/cookies in de omnibox (de adresbalk) in.
  2. Zoek uw app.
  3. Selecteer uw app.
  4. Klik op de X aan de rechterkant van de gemarkeerde selectie.

API-referentie

In deze sectie worden de methoden van de Quota Management API gedocumenteerd.

Constanten

Hieronder volgen webkitStorageInfo constanten, die het type opslag aangeven.

Constante Waarde Beschrijving
TEMPORARY 0 Tijdelijke opslag.
PERSISTENT 1 Persistente opslag.

Methode overzicht

queryUsageAndQuota
requestQuota

Methoden

queryUsageAndQuota

Controleer de opslaggrootte die wordt gebruikt en de beschikbare ruimte die nog beschikbaar is voor de host.

 // you could also use it from webkitPersistentStorage
navigator.webkitTemporaryStorage.queryUsageAndQuota(
      successCallback,
      errorCallback);
  • successCallback : Optionele callback met twee parameters:

    • Het huidige aantal bytes dat de app gebruikt.
    • Het aantal resterende bytes in het quotum.
  • errorCallback : Optionele fout-callback.

verzoekQuota

Vraag om meer opslagruimte. De browser presenteert een informatiebalk waarin de gebruiker wordt gevraagd de app toestemming te geven of te weigeren voor meer opslagruimte.

 // you could also use it from webkitTemporaryStorage
navigator.webkitPersistentStorage.requestQuota (
      newQuotaInBytes,
      quotaCallback,
      errorCallback);
Parameters
  • newQuotaInBytes : Het aantal bytes dat u in uw opslagquotum wilt hebben.
  • successCallback : Optionele callback die het toegekende aantal bytes doorgeeft.
  • errorCallback : Optionele fout-callback.

Toekomstige ontwikkeling

Het plan is om alle HTML5-API's voor offline opslag, inclusief IndexedDB, Application Cache, File System en andere API's die mogelijk worden gespecificeerd, onder de Quota Management API te plaatsen. U kunt er alle opslagtoewijzingen mee beheren.