Zarządzanie pamięcią offline w formacie HTML5

Wprowadzono w HTML5 wiele interfejsów API do przechowywania danych, które pozwalają przechowywać duże ilości danych lokalnie w przeglądarki. Jednak ilość miejsca przydzielonego każdej aplikacji jest domyślnie ograniczona do kilku megabajtów. W Google Chrome możesz poprosić o zwiększenie limitu miejsca na dane, powyżej poprzedniego limitu wynoszącego zaledwie 5 MB

Przedstawiamy w nim podstawowe pojęcia związane z typami pamięci masowej wykorzystywanej w Chrome i opisuje eksperymentalny interfejs API do zarządzania limitami, który pozwala zarządzać limitem miejsca na dane. zakładamy, że znasz już ogólne pojęcia związane z pamięcią po stronie klienta oraz i używanie interfejsów API w trybie offline.

Spis treści

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

Rodzaje pamięci masowej

W Google Chrome możesz poprosić o 3 rodzaje miejsca na dane:

Te typy pamięci masowej zostały szczegółowo opisane w kolejnych sekcjach. Porównanie tych typów inne w tabeli poniżej.

Pamięć tymczasowa

To pamięć tymczasowa, z której może korzystać każda aplikacja internetowa. Chrome automatycznie do tymczasowego miejsca na dane aplikacji, więc nie musisz prosić o jego przydział.

Udostępnianie basenu

Pamięć tymczasowa jest współdzielona przez wszystkie aplikacje internetowe działające w przeglądarce. Pula współdzielona może stanowić maksymalnie 1/3 dostępnego miejsca na dysku. Miejsce używane przez aplikacje jest obecnie są uwzględniane przy obliczaniu współdzielonej puli, czyli obliczenia oparte na (available storage space + storage being used by apps) * .333

Każda aplikacja może mieć maksymalnie 20% wspólnego miejsca. 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ć maksymalnie 4 GB. Ta wartość jest obliczana od 20% (do 4 GB z 1/3 (maksymalnie 20 GB) dostępnego miejsca na dysku (60 GB).

Proszenie o więcej miejsca

Możesz jednak zapytać o ilość dostępnego miejsca na dane i ilość zapisanych już danych dla aplikacji, nie możesz prosić o zwiększenie tymczasowego miejsca na dane. Jeśli aplikacja przekracza przydzielony limit, pojawia się błąd.

Kończy Ci się miejsce na dane

Po przekroczeniu limitu miejsca na dane dla całej puli wszystkie dane przechowywane przez najmniej a ostatnio używany host zostanie usunięty. Przeglądarka nie trwale jednak usunie danych w pamięci lokalnej SessionStorage. W przypadku danych przechowywanych w innych interfejsach API offline przeglądarka usuwa je w całości, a nie aby uniknąć uszkodzenia danych aplikacji w nieoczekiwany sposób.

Każda aplikacja może zajmować maksymalnie 20% puli pamięci masowej, więc prawdopodobnie zostanie usunięta tylko wtedy, gdy użytkownik aktywnie działa więcej niż pięć aplikacji offline, z których każda wykorzystuje maksymalne miejsce.

Jednak ilość dostępnego miejsca może się zmniejszać w miarę dodawania przez użytkowników nowych plików na dyskach twardych. Gdy ilość dostępnego miejsca zmniejsza się (pamiętaj, że współdzielona pula wykorzystuje tylko połowę bieżącej dostępnej przestrzeni dyskowej na dysku), przeglądarka usuwa wszystkie dane przechowywane dla najmniej używanego hosta.

Pamięć trwała

Pamięć trwała to pamięć, która pozostaje w przeglądarce, dopóki użytkownik jej nie zniszczy. Jest dostępna tylko w przypadku aplikacji używających interfejsu File System API, ale później będą dostępne dla innych interfejsów API offline takich jak IndexedDB i Application Cache.

Aplikacja może mieć większy limit pamięci trwałej niż pamięć tymczasowa, ale musisz poproś o miejsce na dane przy użyciu interfejsu Limit Management API, a użytkownik będzie musiał przyznać Ci uprawnienia do zwiększenia limitu kosmosu. 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, z tą różnicą, że jest dostępne tylko dla aplikacji Chrome rozszerzeń (plików .crx). Rozmiar nieograniczonego miejsca na dane jest ograniczony tylko przez jego dostępność na dysku twardym użytkownika. Możesz poprosić o uprawnienie unlimitedStorage w pliku manifestu dla: aplikację lub rozszerzenie. Podczas instalacji użytkownik jest informowany o uprawnieniach wymaganych przez do aplikacji lub rozszerzenia. Kontynuowanie instalacji spowoduje pośrednie przyznanie użytkownikowi uprawnień do wszystkich stron, których adresy URL znajdują się w pliku manifest.json.

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

Porównanie typów pamięci masowej

W tabeli poniżej znajdziesz różnice między tymi 3 typami pamięci masowej.

 Pamięć tymczasowaPamięć trwałaNieograniczone miejsce na dane
Podstawowy opis

Pamięć tymczasowa dostępna dla wszystkich aplikacji internetowych.

Robi się to automatycznie i nie trzeba o nie prosić.

Trwałe miejsce na dane, o które należy poprosić użytkowników za pomocą interfejsu Limit Management API i przyznać mu tę funkcję.

Stałe miejsce na rozszerzenia i aplikacje do Chrome.

Jest ona ustawiona w pliku manifestu i musi być przyznawana przez użytkowników.

Dostępność

Wszystkie aplikacje internetowe.

Wszystkie aplikacje internetowe.Dostępne tylko dla rozszerzeń do Chrome oraz hostowanych i zainstalowanych aplikacji internetowych.
UprawnieniaBrak. Możesz z niego korzystać bez wyraźnej prośby o nie.

Musisz poprosić o więcej miejsca na dane przy użyciu interfejsu Limit Management API.

Możesz poprosić o uprawnienia unlimitedStorage w pliku manifestu aplikacji lub rozszerzenia.
Interfejs użytkownika przy pierwszym użyciuNiewidoczne 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 limit, o który prosisz, jest faktycznie mniejszy niż obecny przydział aplikacji, prośba się nie wyświetli. Większy limit zostanie zachowany.

Podczas instalacji użytkownik jest informowany o uprawnieniach wymaganych przez aplikację lub rozszerzenie. Kontynuując instalację, użytkownik pośrednio 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 kolejnych próśb o zwiększenie ilości miejsca na daneNie dotyczy. Nie możesz prosić o więcej miejsca na dane tymczasowe.

Chrome ponownie prosi użytkownika.

 

Chrome nie pyta użytkownika po instalacji, niezależnie od tego, czy aplikacja lub rozszerzenie prosi o zwiększenie limitu.
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

Maksymalnie 20% wspólnej puli.

0 MB Użytkownik musi wyraźnie poprosić o dostęp do określonej ilości miejsca.

0 MB Musisz jawnie poprosić o unlimitedStorage w pliku manifestu.

Jeśli nie określisz wymagań dotyczących miejsca na dane, Chrome przydzieli aplikację ze współdzielonej puli tymczasowego miejsca na dane.

Maksymalna ilość dostępnego miejscaMaksymalnie 20% wspólnej puli.Rozmiar odpowiadający dostępnemu miejscu na dysku twardym. Nie ma stałej puli miejsca na dane.Rozmiar odpowiadający dostępnemu miejscu na dysku twardym.
Zalecany przypadek użyciaBuforowanie.aplikacje, które działają w trybie offline lub mają dużą liczbę zasobów;Aplikacje przeznaczone do działania w Google Chrome.
Interfejsy API, które mogą z niego 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 internecie, takie jak LocalStorage i SessionStorage, zajmują obecnie 5 MB.

Interfejs API systemu plików

Interfejsy API offline

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

Uwaga: interfejsy API do przechowywania danych w internecie, takie jak LocalStorage i SessionStorage, zajmują obecnie 5 MB.

Zarządzanie limitem

Za pomocą interfejsu Limit Management API, który został wprowadzony w Chrome 13, możesz:

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

Dokumentację referencyjną znajdziesz w następnej sekcji.

Wysyłanie zapytań o wykorzystanie i dostępność miejsca na dane

Aby wysłać zapytanie o używany rozmiar pamięci i ilość pozostałego miejsca dla hosta, wywołaj polecenie queryUsageAndQuota() z:

  • Typ pamięci masowej, który chcesz sprawdzić
  • Udane wywołanie zwrotne

Wykorzystanie zgłaszane przez interfejs API może nie odpowiadać rzeczywistemu rozmiarowi danych użytkownika, ponieważ każde miejsce na dane może potrzebować dodatkowych bajtów na przechowywanie metadanych. Ponadto aktualizacje stanu mogą być opóźnione, co skutkuje Interfejs API nie odzwierciedla najnowszego stanu miejsca na dane.

Fragment kodu poniżej pokazuje, jak poprosić o dostępne miejsce:

// 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 z: webkitStorageInfo.PERSISTENT. Wyliczenie znajduje się też w funkcji window (globalna przestrzeń nazw), dzięki czemu możesz też używać obiektów 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 jest automatyczne i nie możesz: przekracza limit (jak opisano w tabeli).

W przypadku pamięci trwałej dla interfejsu File System API domyślny limit wynosi 0, więc musisz wyraźnie wskazać żądania miejsca na dane aplikacji. Zadzwoń do firmy requestQuota() i podaj następujące dane:

  • Typ pamięci masowej
  • Rozmiar
  • Udane wywołanie zwrotne

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

  • Jeśli poprosisz o zwiększenie limitu, przeglądarka wyświetli użytkownikowi pasek informacyjny i poprosi go o podanie albo przyznać lub odmówić, aby zwiększyć limit. W niektórych przypadkach żądanie może zostać dyskretne zostało odrzucone, po czym zwracany jest bieżący lub mniejszy limit.
  • Jeśli limit, o który prosisz, jest mniejszy niż obecny przydział aplikacji, prośba się nie wyświetli.
  • Jeśli poprosisz o więcej miejsca na dane niż jest dozwolone, pojawi się błąd (QUOTA_EXCEEDED_ERR).
  • Jeśli wywołasz requestQuota() ponownie po tym, jak użytkownik przyznał już odpowiednie uprawnienia, nic się nie stanie. Nie musisz ponownie wywoływać tej metody.

Oto jak poprosić o więcej miejsca:

// 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 na potrzeby testowania

Podczas testowania pamięci w aplikacji możesz wyczyścić zapisane dane, przetestować zarządzanie limitem w swojej aplikacji. Aby to zrobić:

  1. Wpisz chrome://settings/cookies w omniboksie (pasku adresu).
  2. Wyszukaj swoją aplikację.
  3. Wybierz swoją aplikację.
  4. Po prawej stronie zaznaczonego elementu kliknij X.

Dokumentacja API

W tej sekcji opisujemy metody interfejsu Limit Management API.

Stałe

Poniżej są dostępne stałe webkitStorageInfo, które określają typ pamięci masowej.

StałaWartośćOpis
TEMPORARY0Tymczasowa przestrzeń dyskowa.
PERSISTENT1Pamięć trwała.

Omówienie metod

queryUsageAndQuota
requestQuota

Metody

queryUsageAndQuota

Sprawdź rozmiar używanego miejsca na dane i ilość wolnego miejsca dla hosta.

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

    • Bieżąca liczba bajtów używanych przez aplikację.
    • Liczba bajtów, które pozostały w limicie.
  • errorCallback: opcjonalne wywołanie zwrotne błędu.

requestQuota

Poproś o więcej miejsca na dane. Przeglądarka wyświetla pasek informacyjny z prośbą o przyznanie lub odrzucenie aplikacji aby mieć więcej 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 limicie miejsca na dane.
  • successCallback: opcjonalne wywołanie zwrotne, które przekazuje liczbę przyznanych bajtów.
  • errorCallback: opcjonalne wywołanie zwrotne błędu.

Przyszły rozwój

Plan dotyczy wdrożenia wszystkich interfejsów API do przechowywania danych offline w HTML5, w tym IndexedDB, Application Cache i File System i inne interfejsy API, które mogą być określone – w ramach limitu Interfejs API zarządzania Google Analytics. Za jego pomocą możesz zarządzać całym przydziałem miejsca na dane.