J'ai une application web hors ligne utilisant appcaching. J'ai besoin de lui fournir environ 10 Mo - 20 Mo de données qu'il sauvegardera (côté client), principalement des fichiers image PNG. L'opération est la suivante:
Voici mon analyse actuelle des "bases de données" basées sur le client qui gèrent le stockage de blob binaire
NOTE: pour voir une donnée: encodage uri de PNG, j'ai créé un exemple à l'adresse: http://jsbin.com/ivefak/1/edit
Fonctionnalités souhaitées/utiles/inutiles
Implémentations IndexedDB
Mes résultats actuels
FINAL Résultats affichés ci-dessous comme réponse
PouchDB prend désormais en charge les blobs binaires pour tous les navigateurs récents (IE, Chrome, Firefox, Chrome sur mobile, etc.) ainsi que pour de nombreux navigateurs plus anciens. Ce n'était pas le cas lorsque j'ai publié ce message pour la première fois. .
Résultats Cache de blob hors ligne pour les cartes glissantes PNG
Test
Récupération depuis le serveur Web
Stockage
Afficher
Résultats
Pour vos besoins, je suggère de développer un nouveau polyfill basé sur deux autres: FileSystem API to IndexedDB et IndexedDB to WebSQL - est la meilleure option.
Le premier permettra de prendre en charge le stockage des blobs dans Chrome (API FileSystem)) et Firefox (IndexedDB), tandis que le second devrait fournir le support pour Android et iOS ( WebSQL ). Ce qu'il faut, c'est simplement que ces polyfill fonctionnent ensemble et je suppose que ce n'est pas difficile.
NB: Etant donné que je n'ai trouvé aucune information à ce sujet sur le Web, vous devez vérifier si le stockage des blobs à l'aide de la fonction WebSQL Polyfill fonctionnera sur iOS et Android. . Il semble que cela devrait fonctionner si:
var sql = ["CREATE TABLE", idbModules.util.quote(storeName), "(key BLOB", createOptions.autoIncrement ? ", inc INTEGER PRIMARY KEY AUTOINCREMENT" : "PRIMARY KEY", ", value BLOB)"].join(" ")
Il y a quelques années (pas exactement l'âge de pierre), j'utilisais une applet signée Java qui interrogeait son serveur pour connaître les exigences de synchronisation/mise à jour, téléchargeait les fichiers appropriés à partir du serveur et les sauvegardait sur le serveur). système de fichiers de l'utilisateur (pas une base de données). Cette solution peut fonctionner pour vous, bien que vous ayez besoin de quelqu'un pour écrire et signer l'applet. Pour les solutions de base de données, un tel applet peut utiliser le jdbc disponible pour la plupart des bases de données en utilisant localhost sur un port approprié ( Par exemple, 3306 pour MySQL). Je crois que la balise applet est obsolète en HTML 5 mais cela fonctionne toujours. Aucune expérience sur les tablettes Android, il est donc impossible de commenter cette partie-là.
J'ai la mise en cache de la carte exemples (exemple ouvert, découverte des régions et des zooms, commutation hors ligne et découverte des régions disponibles).
Il y a map.js
- couche de la carte pour les tuiles hors ligne, storage.js
- implémentation de stockage basée sur IndexedDb et WebSQL (mais cela ne fait que tester l’implémentation avec des performances médiocres).
Informations complémentaires sur les tailles pour 2 milliards de villes ( Minsk ):