2013-02-05 17 views
7

Budujemy aplikację internetową, która przechowuje wiele plików jako obiekty blob z indexedDB. Jeśli użytkownik użyje naszej aplikacji na maksimum, możemy przechowywać do 15 GB pliku w indexeddb.Limit pamięci dla indexeddb na IE10

Wystąpił problem z IE10, który, jak podejrzewam, jest problemem z limitem.

Po pomyślnym zapisaniu niektórych plików nowe połączenie z numerem store.put(data, key); nigdy się nie zakończy.

Zasadniczo funkcja zostanie wywołana, ale nie zostanie wywołane żadne zdarzenie powodzenia ani zdarzenie błędu.

Jeśli zajrzę do folderu IndexedDB w IE 10, zobaczę garść plików tymczasowych (o wielkości 512 kB), które będą tworzone i usuwane w nieskończoność.

Podczas przeglądania okna parametrów "Pamięć podręczna i baza danych" widzę, że baza danych mojej witryny osiągnęła 250 MB.

W dalszej kolejności znalazłem ten wpis na blogu: http://msdnrss.thecoderblogs.com/2012/12/using-html5javascript-in-windows-store-apps-data-access-and-storage-mechanism-ii/, który, jak się nawiasem mówiąc, limit miejsca na aplikacje w Sklepie Windows to 250 MB.

Nie używam żadnego mechanizmu Windows Store, ale pomyślałem, że mogę być ofiarą tego samego arbitralnego limitu.

Więc moje pytanie brzmi:

  • Czy istnieje jakiś sposób, aby ominąć ten limit? Użytkownik jest proszony o pozwolenie na przekroczenie limitu 10 MB, ale nie widziałem pytania, które wyświetliłoby się użytkownikowi po osiągnięciu 250 MB.

  • Czy istnieje inny sposób przechowywania ponad 250 MB danych za pomocą IE10.

Dzięki, wezmę wszelkie wskazówki.

+0

Mam świadomość, że jest to stare pytanie, ale czy znalazłeś rozwiązanie do IE nie uruchamiania żadnych sukcesów lub obsługi błędów, gdy limit jest spełniony? Używam indexedDB do buforowania dużych ilości danych. Po osiągnięciu limitu proces po prostu się zawiesza, nie ma żadnych błędów ani połączeń zwrotnych. Bardzo utrudnia implementację pamięci podręcznej w stylu LRU, gdy stanie się pełna. – ste2425

+0

Zignoruj ​​mój ostatni komentarz, do końca, aby go edytować. IE nie blokuje się. Ale uruchamia program 'onabort', nie obsługujący błędów. – ste2425

Odpowiedz

5

Boję się, że nie możesz. Zapewnienie limitu miejsca i poproszenie użytkownika o zezwolenie na więcej miejsca jest obowiązkiem dostawcy przeglądarki. Więc nie sądzę, że pierwsza opcja ma zastosowanie.

Wiem, że użytkownik może zezwolić witrynie przekroczyć limit udzielania (opcje internetowe> Ogólne> Historia przeglądania> ustawienia> pamięci podręczne i bazy danych), ale nie wiem, czy spowoduje to przekroczenie limitu 250 MB. Możliwe, że jest to zakodowany limit, którego nie można przekroczyć.

Ten limit jest powiązany z domeną, co oznacza, że ​​nie można go rozwiązać, tworząc wiele baz danych. Jedynym rozwiązaniem byłoby przechowywanie w wielu domenach, ale w takim przypadku nie można uzyskać do nich dostępu. Ponadto, jak widzę, limit 250 MB będzie dla API indexeddb i interfejsu API plików połączonych

+2

Bałem się czegoś takiego. Aby uzyskać informacje, jeśli użytkownik ustawił wartość większą niż 250 w "Powiadom mnie, gdy bufor lub baza danych stron przekroczy", będziemy mogli osiągnąć ten limit. Jednak gdy użytkownik kliknie przycisk OK, aby umożliwić witrynie przekroczenie tego limitu, pojawi się ten sam błąd (nieskończony proces w tle).Niestety, nie możemy ustawić limitu przekraczającego 999 MB (cholera, Microsoft, dlaczego ciągle myślisz, że jesteś mądrzejszy od swoich użytkowników)? – Thomas

+1

Z drugiej strony, dlaczego chciałbyś przechowywać tę ilość danych na kliencie? Może musisz przeprojektować koncepcję, której używasz teraz. Czytałem artykuł wskazujący, że API indexeddb jest interesujące aż do punktu 250mb. Poza tym straciłaby wydajność ... –

+5

Jeśli piszesz aplikację HTML5 w przeciwieństwie do tradycyjnej aplikacji komputerowej, możesz chcieć zapisać 250 MB danych w IndexedDB z tego samego powodu, z którego każda tradycyjna aplikacja komputerowa zapisuje obecnie tyle danych na dysk twardy. Na przykład, jako hobby, pracuję nad czysto kliencką grą, która może produkować bazy danych IndexedDB przekraczające 100 MB (teoretycznie mogą być nieskończenie duże, jeśli gra trwa wystarczająco długo, ale nie testowałem zbyt wiele więcej niż 100 MB), aw moich bardzo nienaukowych testach nie miałem problemów z wydajnością. – dumbmatter