web-dev-qa-db-fra.com

Meilleure persistance des données pour les applications Angularjs / Javascript sur PhoneGap?

Je cherche à trouver les meilleures pratiques pour la persistance des données Angularjs sur une application PhoneGap. J'utilise Ionic Framework en plus de cela, mais pas pertinent pour cette question car il est juste construit au-dessus de Angular & Cordova.

J'aime ça Angular reste flexible sur les solutions de persistance des données, c'est logique car c'est un framework web pas spécifiquement un framework d'application hybride ... j'aimerais savoir comment les gens résolvent cela.

Voici un aperçu:

Exigences

  • Ajoutez une base de données locale à la génération d'application pour les données préchargées. Cela dépassera la limite de 5 Mo de données.
  • Charger les données de la base de données locale au démarrage.
  • Enregistrement des données mises à jour dans le magasin de données local pour la persistance.
  • Si possible, préférez sans schéma.
  • Interface de requête simple. Je pouvais charger toutes les données en mémoire et utiliser simplement des filtres Angular pour cela, à condition que les performances soient correctes.
  • Interface de requête d'objet ... quelque chose comme un ORM de type ActiveRecord plutôt que d'avoir à écrire du SQL dans mon application.
  • Preuve d'avenir. Je ne veux pas réinventer la roue chaque fois que je crée une application qui nécessite la persistance des données. J'aimerais également choisir quelque chose de plus standard si possible afin que je puisse continuer à l'utiliser à l'avenir ... quelque chose comme Indexeddb aurait du sens ici.

Les options

J'ai regardé les options suivantes. Pouvez-vous fournir des commentaires sur l'un de ces éléments?

  • Breezejs - semble plus concentré sur le serveur. Existe-t-il une interface SQLite?
  • YDN-DB - Semble être une option, mais semble également un peu obscur par rapport à certaines des autres options.
  • JayData - Est-ce toujours actif? Préoccupé par l'aspect commercial de celui-ci.
  • Persistencejs - Cela semble prometteur. Le projet est-il toujours actif?
  • ngStorage - est-ce juste une interface localStorage? Résout-il la limite de 5M?
  • Angular-cache - Puis-je avoir des données à précharger avec cela? Combien de temps puis-je conserver des données?
  • localForage - ne sais pas grand-chose à ce sujet. Résout-il la limite de 5M?
  • Pouchdb - préoccupé par le langage de requête. ne résout pas la restriction 5M
  • Couchdb Lite - préoccupé par le langage de requête.
  • WebSQL - Je ne l'utilise pas car il semble qu'il soit en voie de disparition .. plus 5M de limite.
  • Indexeddb - Il existe une cale qui crée une couche de compatibilité pour la plupart des principaux navigateurs. Limite de 5M. Si je pouvais l'utiliser sur Sqlite, ce serait probablement un gagnant pour moi car plus de normes sont basées.
  • Stocker dans un fichier json - Utilisez simplement de vieux objets simples, puis utilisez l'api du fichier Phonegap pour charger et stocker des données sérialisées. Il semble difficile de devoir sérialiser toutes les données à chaque fois que nous voulons enregistrer ... mais une option tant que je peux utiliser des filtres Angular.

Désolé pour le long post. J'aimerais vraiment voir quelques réflexions sur les meilleures pratiques. J'adorerais un moyen Angular pour gérer la persistance de grandes données sur les applications mobiles hybrides.

Merci

41
Kevin Baker

PouchDB dev ici. Évidemment, je suis partial, mais voici mon point de vue:

  1. La meilleure façon de contourner les quotas de stockage dans PhoneGap/Cordova est d'utiliser le plugin SQLite pour iOS/Android. Les performances ont également tendance à être meilleures, en particulier sur Android. ( Edit : dans Android post-KitKat moderne, c'est en fait pire.)

  2. WebSQL a un langage de requête agréable, mais vous voulez être à l'épreuve du temps, c'est-à-dire ne pas vous enchaîner à une norme morte. Il y a aussi Windows Phone et Firefox OS à considérer.

  3. Donc, si vous utilisez PouchDB et installez le plugin PhoneGap, cela fonctionnera sur plusieurs navigateurs et vous éviterez la limite de stockage sur iOS/Android. Gagner?

De plus, c'est mon expérience personnelle qui Angular convient à PouchDB comme PB&J, car Angular traite des objets JSON droits et Pouch aussi. (Comparez cela avec Ember et Backbone, qui ont des classes personnalisées que vous devez exporter/importer à partir de JSON - c'est un peu plus compliqué.)

Bonne chance avec quoi que tu choissises!

18
nlawson

Vous pouvez utiliser localForage et ma mise en œuvre en angulaire: https://github.com/ocombe/angular-localForage Sur mobile, il utilisera soit indexedDB ou webSQL et la limite initiale sera de 50 Mo. La syntaxe sera vraiment facile à utiliser dans votre projet angular.

6
Olivier

Indexeddb - Il existe une cale qui crée une couche de compatibilité pour la plupart des principaux navigateurs. Limite de 5M. Si je pouvais l'utiliser sur Sqlite, ce serait probablement un gagnant pour moi car plus de normes sont basées.

En fait, la limite pour WebSQL (la couche sous la cale que vous utiliserez réellement sous le capot) est de * 50 * M. Cependant, il existe une demande d'autorisation que vous pouvez utiliser pour obtenir plus de stockage. De plus, c'est ce que je recommanderais pour exactement les raisons que vous avez notées: les normes. La rumeur veut que Safari 7.1 soit livré avec le support IndexedDB.

1
Jeff Hubbard