Zarządzanie pamięcią offline w formacie HTML5

W HTML5 wprowadziliśmy wiele interfejsów API pamięci masowej, które pozwalają przechowywać duże ilości danych lokalnie w przeglądarkach użytkowników. Jednak ilość miejsca przydzielonego do każdej aplikacji jest domyślnie ograniczona do kilku megabajtów. Google Chrome pozwala poprosić o większy limit miejsca na dane wykraczający poza poprzedni limit wynoszący 5 MB.

Ten dokument przedstawia podstawowe pojęcia związane z typami miejsca na dane używane w Chrome i zawiera opis eksperymentalnego interfejsu Quota Management API, który umożliwia zarządzanie limitem miejsca na dane. Zakładamy w nim, że znasz już ogólne pojęcia związane z pamięcią po stronie klienta i wiesz, jak korzystać z interfejsów API offline.

Spis treści

  1. Rodzaje pamięci masowej
    1. Tymczasowe
    2. Trwały
    3. Bez ograniczeń
    4. Porównanie typów pamięci masowej
  2. Zarządzanie limitem
    1. Wykorzystanie i dostępność miejsca na dane na potrzeby zapytań
    2. Prośba o więcej miejsca na dane
    3. Resetowanie limitu testowania
  3. Dokumentacja API
    1. Stałe
    2. Omówienie metod
    3. Metody
  4. Rozwój

Rodzaje pamięci masowej

W Google Chrome możesz poprosić o 3 typy pamięci:

Te typy pamięci masowej zostały szczegółowo opisane w sekcjach poniżej. Porównanie ich ze sobą znajdziesz w tabeli poniżej.

Pamięć tymczasowa

Pamięć tymczasowa to pamięć przejściowa dostępna dla każdej aplikacji internetowej. Chrome automatycznie udostępnia aplikacji pamięć tymczasową, więc nie musisz prosić o przydzielenie miejsca.

Wspólny basen

Pamięć tymczasowa jest współdzielona przez wszystkie aplikacje internetowe uruchomione w przeglądarce. Pula wspólna może zajmować do 1/3 dostępnego miejsca na dysku. Pamięć już używana przez aplikacje jest uwzględniana w obliczeniach puli współdzielonej. Oznacza to, że obliczenia są oparte na:(available storage space + storage being used by apps) * .333

Każda aplikacja może mieć do 20% wspólnego miejsca na dane. Jeśli na przykład całkowita ilość dostępnego miejsca na dysku wynosi 60 GB, pula wspólna to 20 GB, a aplikacja może mieć do 4 GB. Wartość ta jest obliczana na podstawie 20% (do 4 GB) z 1/3 (do 20 GB) dostępnego miejsca na dysku (60 GB).

Prośba o więcej miejsca

Możesz wysyłać zapytania o ilość dostępnego miejsca na dane oraz ilość danych już przechowywanych dla aplikacji, ale nie możesz prosić o zwiększenie ilości tymczasowego miejsca na dane. Jeśli aplikacja przekroczy przydzielony limit, zgłaszany jest błąd.

Kończy się miejsce na dane

Gdy przekroczysz limit miejsca na dane dla całej puli, wszystkie dane przechowywane przez najmniej używany host Przeglądarka nie usunie jednak danych z pamięci LocalStorage i SessionStorage. W przypadku danych przechowywanych w innych interfejsach API offline przeglądarka usuwa dane w całości, a nie częściowo, aby dane aplikacji nie zostały uszkodzone w nieoczekiwany sposób.

Każda aplikacja może zajmować maksymalnie 20% puli pamięci masowej, więc usunięcie prawdopodobnie nastąpi tylko wtedy, gdy użytkownik aktywnie korzysta z więcej niż 5 aplikacji offline, z których każda wykorzystuje maksymalną ilość miejsca.

Ilość dostępnego miejsca może się jednak zmniejszać w miarę dodawania kolejnych plików z dysków twardych. Gdy ilość dostępnego miejsca na dysku się zmniejsza (pamiętaj, że pula współdzielona wykorzystuje tylko połowę bieżącego dostępnego miejsca na dysku), przeglądarka usuwa wszystkie dane przechowywane na najrzadziej używanym hoście.

Pamięć trwała

Pamięć trwała to pamięć, która pozostaje w przeglądarce, chyba że użytkownik ją trwale usunie. Jest dostępny tylko dla aplikacji używających interfejsu File System API, ale z czasem będzie dostępny dla innych interfejsów API offline, takich jak IndexedDB i Application Cache.

Aplikacja może mieć większy limit pamięci trwałej niż tymczasowy, ale musisz poprosić o miejsce za pomocą interfejsu limit Management API, a użytkownik musi przyznać Ci uprawnienia do korzystania z większej ilości miejsca. Chrome wyświetla pasek informacyjny z prośbą o przyznanie aplikacji więcej miejsca w pamięci lokalnej.

Nieograniczone miejsce na dane

Nieograniczone miejsce na dane jest podobne do pamięci trwałej, ale jest dostępne tylko dla aplikacji Chrome i rozszerzeń (plików .crx). Wielkość nieograniczonego miejsca na dane jest ograniczona wyłącznie przez ilość dostępnego miejsca na dysku twardym użytkownika. Możesz poprosić o uprawnienia unlimitedStorage w pliku manifestu aplikacji lub rozszerzenia. Podczas instalacji użytkownik jest informowany o uprawnieniach wymaganych przez aplikację lub rozszerzenie. Kontynuując instalację, użytkownik domyślnie przyznaje uprawnienia wszystkim stronom, których adresy URL są wymienione w pliku manifest.json.

Więcej informacji znajdziesz w przewodnikach dla programistów dotyczących aplikacji i rozszerzeń.

Porównanie typów pamięci masowej

W tabeli poniżej opisujemy różnice między tymi 3 typami miejsca na dane.

 Pamięć tymczasowaPamięć trwałaNieograniczone miejsce na dane
Opis podstawowy

Tymczasowa pamięć masowa, która jest dostępna dla każdej aplikacji internetowej.

Jest to automatyczne i nie trzeba o niego prosić.

Stałe miejsce na dane, o które należy poprosić za pomocą interfejsu Quota Management API i przyznać użytkownikom.

Stała pamięć na potrzeby rozszerzeń i aplikacji Chrome.

Jest on określony w pliku manifestu i musi zostać przyznany przez użytkowników.

Dostępność

Wszystkie aplikacje internetowe.

Wszystkie aplikacje internetowe.Są unikalne dla rozszerzeń do Chrome oraz hostowanych i zainstalowanych aplikacji internetowych.
UprawnieniaBrak. Możesz z niej korzystać bez wyraźnego żądania.

Musisz poprosić o więcej miejsca na dane za pomocą interfejsu Quota Management API.

Możesz poprosić o uprawnienia unlimitedStorage w pliku manifestu aplikacji lub rozszerzenia.
Interfejs użytkownika przy pierwszym użyciuNiewidoczny dla użytkownika. Aplikacja po prostu działa.

Chrome wyświetla pasek informacyjny z prośbą o zaakceptowanie lub odrzucenie prośby o miejsce na dane.

Jeśli jednak żądany limit jest mniejszy niż bieżący przydział aplikacji, pytanie się nie wyświetla. Większy limit jest zachowywany.

Podczas instalacji użytkownik jest informowany o uprawnieniach wymaganych przez aplikację lub rozszerzenie. Decydując się na instalację, użytkownik domyślnie przyznaje uprawnienia wszystkim stronom, których adresy URL są wymienione w pliku manifest.json w przypadku aplikacji lub rozszerzenia.

Wrażenia użytkowników po otrzymaniu prośby o zwiększenie ilości miejsca na daneNie dotyczy. Nie możesz poprosić o więcej tymczasowego miejsca na dane.

Chrome ponownie zapyta użytkownika.

 

Chrome nie pyta użytkownika po instalacji, niezależnie od żądań zwiększenia limitu przez aplikację lub rozszerzenie.
Trwałość danych

Przejściowa. Przeglądarka może usunąć dane.

Niezmienny. Przeglądarka nie usuwa danych, chyba że użytkownik o to poprosi. Dane są dostępne przy kolejnych dostępach.

Nie zakładaj, że dane są trwałe, ponieważ użytkownik może je usunąć.

Taka sama jak pamięć trwała.

 

Domyślne miejsce na dane

Do 20% wspólnego zasobu.

0 MB. O konkretne miejsce na dane musisz wyraźnie poprosić.

0 MB. Musisz wyraźnie poprosić o unlimitedStorage w pliku manifestu.

Jeśli nie określisz wymagań dotyczących miejsca na dane, Chrome przydziela aplikacji miejsce na dane ze współdzielonej pamięci tymczasowej.

Maksymalna ilość dostępnego miejscaDo 20% wspólnego zasobu.Tyle ile wolnego miejsca na dysku twardym. Nie ma stałej puli miejsca na dane.Tyle ile wolnego miejsca na dysku twardym.
Zalecany przypadek użyciaBuforowanie.aplikacje, które działają w trybie offline lub mają dużą liczbę zasobów;Aplikacje, które działają w Google Chrome.
Interfejsy API, które mogą z nich korzystać

Interfejsy API offline

  • Pamięć podręczna aplikacji
  • System plików
  • IndexedDB
  • WebSQL (wycofany od 18 listopada 2010 r.)

Uwaga: interfejsy API do przechowywania danych w sieci, takie jak LocalStorage i SessionStorage, nadal mają rozmiar 5 MB.

Interfejs File System API

Interfejsy API offline

  • Pamięć podręczna aplikacji
  • System plików
  • IndexedDB
  • WebSQL (wycofany)

Uwaga: interfejsy API do przechowywania danych w sieci, takie jak LocalStorage i SessionStorage, nadal mają rozmiar 5 MB.

Zarządzanie limitem

Dzięki interfejsowi Quota Management API, który został wprowadzony w Chrome 13, możesz wykonywać te czynności:

Interfejs API jest zaimplementowany za pomocą obiektu globalnego window.webkitStorageInfo.

Materiały referencyjne znajdziesz w następnej sekcji.

Zapytania dotyczące wykorzystania i dostępności miejsca na dane

Aby przesłać zapytanie dotyczące rozmiaru używanego miejsca na dane i ilości wolnego miejsca dla hosta, wywołaj queryUsageAndQuota(), podając te dane:

  • Typ miejsca na dane, które chcesz sprawdzić
  • Udane oddzwonienie

Wykorzystanie zgłaszane przez interfejs API może nie odpowiadać rzeczywistemu rozmiarowi danych użytkownika, ponieważ do przechowywania metadanych konieczne może być dodatkowe bajty danych. Aktualizacje stanu mogą też być opóźnione, przez co interfejs API nie odzwierciedla najnowszego stanu miejsca na dane.

Z tego fragmentu kodu dowiesz się, jak zapytać o miejsce na dane:

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

Jeśli chcesz zapytać o stan pamięci trwałej, po prostu zastąp webkitStorageInfo.TEMPORARY wartością webkitStorageInfo.PERSISTENT. Wyliczenie znajduje się też w obiekcie window (globalnej przestrzeni nazw), więc możesz też używać window.PERSISTENT i window.TEMPORARY.

Prośba o więcej miejsca na dane

Nie musisz prosić o więcej tymczasowego miejsca na dane, ponieważ przydzielanie odbywa się automatycznie i nigdy nie da się przekroczyć maksymalnego limitu (zgodnie z opisem w tabeli).

W przypadku pamięci trwałej dla interfejsu File System API limit domyślny wynosi 0, dlatego musisz wyraźnie poprosić o miejsce na dane dla aplikacji. Zadzwoń pod numer requestQuota(), podając:

  • Typ pamięci masowej
  • Rozmiar
  • Udane oddzwonienie

W zależności od tego, o co poprosisz:

  • Jeśli poprosisz o większy limit, przeglądarka wyświetla użytkownikowi pasek informacji z prośbą o przyznanie lub odmowę zwiększenia limitu. W niektórych przypadkach żądanie może zostać dyskretnie odrzucone i zwrócić bieżący lub mniejszy limit.
  • Jeśli żądany limit jest mniejszy niż bieżący przydział aplikacji, pytanie się nie wyświetla.
  • Jeśli poprosisz o więcej miejsca na dane, niż jest to dozwolone, pojawi się błąd (QUOTA_EXCEEDED_ERR).
  • Jeśli ponownie wywołasz funkcję requestQuota(), gdy użytkownik już udzielił już zgody, nic się nie wydarzy. Nie musisz już wywoływać tej metody ponownie.

Poniżej znajdziesz instrukcje, jak poprosić o więcej miejsca na dane:

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

Resetuję limit testowania

Podczas testowania miejsca na dane w aplikacji warto wyczyścić zapisane dane, aby od nowa przetestować zarządzanie limitami w aplikacji. Aby to zrobić:

  1. Wpisz chrome://settings/cookies w omniboksie (pasku adresu).
  2. Wyszukaj swoją aplikację.
  3. Wybierz swoją aplikację.
  4. Kliknij X po prawej stronie wyróżnionego zaznaczenia.

Dokumentacja API

W tej sekcji opisujemy metody interfejsu Limit Management API.

Stałe

To są stałe webkitStorageInfo, które wskazują typ pamięci masowej.

StałaWartośćOpis
TEMPORARY0Pamięć tymczasowa.
PERSISTENT1Pamięć trwała.

Omówienie metod

queryUsageAndQuota
requestQuota

Metody

queryUsageAndQuota

Sprawdź rozmiar używanej pamięci masowej i wolnego miejsca dla hosta.

 // you could also use it from webkitPersistentStorage
navigator.webkitTemporaryStorage.queryUsageAndQuota(
      successCallback,
      errorCallback);
  • successCallback: opcjonalne wywołanie zwrotne z 2 parametrami:

    • Bieżąca liczba bajtów używanych przez aplikację.
    • Liczba bajtów pozostałych w limicie.
  • errorCallback: opcjonalny wywołanie zwrotne dotyczące błędu.

requestQuota

Poproś o więcej miejsca na dane. Przeglądarka wyświetla pasek informacyjny, aby prosić użytkownika o przyznanie lub odrzucenie uprawnień do zwiększenia ilości miejsca na dane.

 // you could also use it from webkitTemporaryStorage
navigator.webkitPersistentStorage.requestQuota (
      newQuotaInBytes,
      quotaCallback,
      errorCallback);
Parametry
  • newQuotaInBytes: liczba bajtów, jaką chcesz mieć w ramach limitu miejsca na dane.
  • successCallback: opcjonalne wywołanie zwrotne, które przekazuje liczbę przypisanych bajtów.
  • errorCallback: opcjonalny wywołanie zwrotne dotyczące błędu.

Rozwój w przyszłości

Planujemy umieścić wszystkie interfejsy API do przechowywania danych w trybie offline w środowisku HTML5 – w tym IndexedDB, Application Cache, File System i inne interfejsy API, które mogą być określone – w interfejsie Quota Management API. Za jego pomocą możesz zarządzać całym przydziałem miejsca na dane.