Sejamos francos, o AppCache é chato e tem problemas [1, 2, 3]. Uma grande limitação é o fato de que é impossível armazenar recursos em cache dinamicamente sob demanda. Basicamente, isso faz com que seja uma coisa de tudo ou nada quando se trata de deixar um aplicativo off-line. Ou tudo no manifesto é armazenado em cache antecipadamente ou nada é armazenado.
A API FileSystem HTML5 se torna uma solução atraente para as limitações do AppCache. É possível armazenar programaticamente arquivos e hierarquias de pastas no sistema de arquivos local (sandbox) e, posteriormente, adicionar/atualizar/remover recursos individuais conforme necessário. Meu colega Boris Smus até escreveu uma boa biblioteca para gerenciar esse tipo de armazenamento em cache off-line no contexto dos jogos. A mesma ideia pode ser extrapolada para funcionar com qualquer tipo de aplicativo da Web.
crbug.com/89271 é uma correção importante para a API FileSystem, que faz com que os caminhos relativos do sistema de arquivos: URL funcionem como um charm.
Digamos, por exemplo, que eu salvei o index.html na pasta raiz do sistema de arquivos (fs.root
), criei uma pasta "img" e salvei "test.png" nela. O URL filesystem:
desses dois arquivos seria filesystem:http://example.com/temporary/index.html
e filesystem:http://example.com/temporary/img/test.png
, respectivamente. Então, se eu quisesse usar "test.png" para uma img.src
, seria necessário usar o caminho absoluto completo: <img src="filesystem:http://example.com/temporary/img/test.png">
. Isso significava reescrever todos os URLs relativos em index.html para apontar para o URL filesystem:
do arquivo correspondente. Isso não foi legal! Agora, com a correção desse bug, posso manter o caminho relativo para o arquivo (<img src="img/test.png">
), que vai ser resolvido corretamente para uma origem do sistema de arquivos.
Esse recurso simplifica o processo de abrir uma página e salvar todos os recursos off-line, preservando exatamente a mesma estrutura de pastas que a versão on-line.