2009-12-21 6 views
0

Mon application est fortement axée sur les données et doit être fréquemment mise à jour. Actuellement, la base de données MySQL est déversée dans un fichier XML via PHP, et lorsque l'application le charge télécharge ce fichier. Ensuite, il charge toutes les valeurs dans NSMutableArray à l'intérieur d'une classe de gestionnaire de données qui peut être accessible n'importe où dans l'application.Comment mettre en cache/mettre à jour correctement les applications iPhone pilotées par les données qui utilisent des bases de données distantes?

Voici le problème, le fichier XML produit est d'environ 400kb, et cela prend apparemment plusieurs minutes à télécharger sur le réseau EDGE, et même pour certaines personnes sur la 3G. Donc, fondamentalement, je cherche des options sur la façon de mettre en cache ou d'optimiser correctement le processus de téléchargement de mon application. Ma pensée actuelle est quelque chose de similaire à la mise en cache du fichier XML sur le disque dur de l'iPhone, puis à la diffusion de ces données lorsque l'utilisateur navigue dans l'application et charge le nouveau fichier XML en arrière-plan. Le problème avec ceci est que l'utilisateur va maintenant toujours voir les données de l'exécution précédente, il semble également inutile de télécharger le fichier XML entier à chaque fois si un seul champ a été changé.

TLDR: Le téléchargement des données de mon application iPhone est lent, comment pourrait-on correctement minimiser cet effet?

Répondre

1

Ma suggestion serait de mettre en cache les données dans une base de données SQLite sur l'iPhone. Lorsque l'application démarre, vous synchronisez la base de données SQLite avec votre base de données distante ... tout en informant l'utilisateur que vous chargez des données incrémentielles en arrière-plan.

En faisant cela, vous obtenez ce qui suit:

  1. Les utilisateurs peuvent utiliser l'application immédiatement avec des données périmées.
  2. Vous faites savoir à l'utilisateur que de nouvelles données arrivent.
  3. Vous stockez les données dans un format plus approprié.

Et une fois que les données les plus récentes est chargé ... l'utilisateur à la voir.

+0

C'est quelque chose que j'aimerais considérer aussi. Il a l'avantage d'exploiter le framework de données de base de l'iPhone. Le seul problème est que c'est un travail rémunéré où la tolérance au risque est très faible et je n'ai jamais utilisé les données de base. Le client veut l'option qui peut être mise en place dans un court laps de temps, qui est probablement juste pour enregistrer le fichier XML sur le disque, (ne pas avoir à réécrire le code pour peupler les tableaux, et l'afficher dans les parties pertinentes du app.) – Jameson

2

J'ai dû faire face à quelque chose comme ça dans une application que j'ai développée au cours de l'été.

Pour résoudre ce problème, je devais effectuer un téléchargement initial de toutes les données du serveur et les placer dans une base de données sur le client avec un numéro de révision.

Chaque fois que l'utilisateur se connecte à nouveau, il envoie le numéro de révision au serveur, si le numéro de révision est inférieur au numéro de révision du serveur qu'il envoie sur les nouvelles données (et seulement les nouvelles données). le même alors il ne fait rien.

C'est assez simple et ça me va plutôt bien.

Cette méthode présente l'inconvénient que votre serveur doit faire un peu plus de traitement que la normale, mais c'est pratiquement rien et c'est beaucoup mieux que la bande passante gaspillée.

Questions connexes