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
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ęć tymczasowa | Pamięć trwała | Nieograniczone 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. |
Uprawnienia | Brak. 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życiu | Niewidoczne 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 dane | Nie 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 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 miejsca | Maksymalnie 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życia | Buforowanie. | 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
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
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:
- Zapytania o wykorzystanie i dostępność miejsca na dane
- Prośba o więcej miejsca na dane
- Resetuj limit na potrzeby testowania
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ć:
- Wpisz
chrome://settings/cookies
w omniboksie (pasku adresu). - Wyszukaj swoją aplikację.
- Wybierz swoją aplikację.
- 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ła | Wartość | Opis |
---|---|---|
TEMPORARY | 0 | Tymczasowa przestrzeń dyskowa. |
PERSISTENT | 1 | Pamięć 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.