Soyons réalistes, AppCache est agaçant et présente des problèmes [1, 2, 3]. L'une des limites majeures réside dans le fait qu'il est impossible de mettre en cache les éléments de manière dynamique à la demande. En gros, cela en fait une solution tout ou rien quand il s'agit de mettre une application hors connexion. Soit tout le contenu du fichier manifeste est mis en cache à l'avance, soit rien n'est mis en cache.
L'API FileSystem HTML5 devient une solution intéressante pour les problèmes liés à AppCache. Il est possible de stocker des fichiers et des hiérarchies de dossiers par programmation dans le système de fichiers local (en bac à sable), puis d'ajouter, de mettre à jour et de supprimer des ressources individuelles si nécessaire. Mon collègue Boris Smus a même écrit une bonne bibliothèque pour gérer ce type de mise en cache hors connexion dans le contexte des jeux. La même idée peut être extrapolée pour fonctionner avec n'importe quel type d'application Web.
crbug.com/89271 est un correctif important pour l'API FileSystem, qui permet aux chemins d'accès filesystem: URL relatifs de fonctionner comme un charme.
Imaginons, par exemple, que j'ai enregistré index.html dans le dossier racine du système de fichiers (fs.root
) et que j'ai créé un dossier img et enregistré "test.png". L'URL filesystem:
pour ces deux fichiers serait respectivement filesystem:http://example.com/temporary/index.html
et filesystem:http://example.com/temporary/img/test.png
. Ensuite, si je voulais utiliser "test.png" pour un élément img.src
, il fallait utiliser son chemin absolu complet: <img src="filesystem:http://example.com/temporary/img/test.png">
. Cela impliquait de réécrire toutes les URL relatives du fichier index.html pour qu'elles pointent vers l'URL filesystem:
du fichier correspondant. Pas cool ! Maintenant, grâce à cette correction de bug, je peux conserver le chemin relatif du fichier (<img src="img/test.png">
), car il sera correctement résolu vers une origine du système de fichiers.
Grâce à cette fonctionnalité, il est facile de faire défiler une page vers le bas et d'enregistrer toutes ses ressources hors connexion, tout en conservant exactement la même structure de dossiers que pour la version en ligne.