Prawda jest taka, że AppCache jest irytujące i ma problemy [1, 2, 3]. Jednym z głównych ograniczeń jest brak możliwości dynamicznego buforowania zasobów na żądanie. Oznacza to, że gdy chcesz przenieść aplikację do trybu offline, nie musisz już nic robić. Cała zawartość pliku manifestu jest zapisywana w pamięci podręcznej z góry lub nic nie jest przechowywane w pamięci podręcznej.
Interfejs FileSystem API w języku HTML5 staje się atrakcyjnym rozwiązaniem w przypadku wad AppCache. Można programowo przechowywać pliki i hierarchie folderów w lokalnym systemie plików (w trybie piaskownicy), a następnie w razie potrzeby dodawać, aktualizować i usuwać poszczególne zasoby. Mój kolega, Boris Smus, napisał nawet przydatną bibliotekę do zarządzania tego typu pamięcią podręczną offline w kontekście gier. Ten sam pomysł można ekstrapolować do dowolnej aplikacji internetowej.
crbug.com/89271 to ważna poprawka interfejsu FileSystem API, dzięki której ścieżki względnego systemu filesystem: URL działają niesamowicie.
Załóżmy, że zapisałem plik index.html w folderze głównym systemu plików (fs.root
), utworzyłem folder img, a potem zapisałem w nim plik „test.png”. Adres URL filesystem:
tych 2 plików miałby odpowiednio filesystem:http://example.com/temporary/index.html
i filesystem:http://example.com/temporary/img/test.png
. Następnie, aby użyć pliku „test.png” dla elementu img.src
, trzeba użyć pełnej ścieżki bezwzględnej: <img src="filesystem:http://example.com/temporary/img/test.png">
. Oznaczało to przepisanie wszystkich względnych URL-i w pliku index.html, by wskazywały adres URL filesystem:
odpowiedniego pliku. Kiepska sprawa! Teraz dzięki tej poprawce mogę zachować ścieżkę względną do pliku (<img src="img/test.png">
), ponieważ będą one prawidłowo otwierać w miejscu pochodzenia systemu plików.
Ta funkcja sprawia, że usunięcie strony i zapisanie wszystkich jej zasobów offline przy jednoczesnym zachowaniu dokładnie takiej samej struktury folderów jak w wersji online jest bardzo proste.