[Conseils] Optimisation d'une application ?

Bonjour à  tous!



Voila je souhaiterai que vous m'aidiez sur un point bien spécifique du développement d'une application mobile : son optimisation!

Débutant dans développement iOS, une structure globale de ce que je souhaite réalisé est déjà  fait, mais le temps d'execution de l'application n'est absolument pas bon. Et il est temps d'y remédier! Après tout n'est-ce pas la le point le plus important?


Donc voila, je vous décris ce qui est important a savoir dans l'application et ensuite je vous fait un petit topo de ce qui ne va pas.


Pour commencer, l'application est composée de 3 vue principales accessible via une TabBar, et chacune de ces vue est une TableView.


Les éléments du premier TableView sont des titres de news, et lorsque l'on clique dessus, on a la news au globale afficher dans une WebView.


La second est une TableView de catégorie d'image, et lorsque l'on clique dessus, on arrive sur une gallerie photo en CollectionViewController (et le clic sur une des cells ouvre un PhotoScoller, MWPhotoBrowser en l'occurence)


La troisième vue, est similaire à  la seconde.


Le problème c'est que les données à  afficher sont récupérées depuis un flux XML (les images dans le flux ne sont que les URL de ces dernières), sur le net donc.

Le parse de ce flux est effectué, il n'y a pas de soucis.


L'affichage des images également... Par contre là , c'est plus long.

Les images font en moyenne 500Ko, donc forcément... J'ai donc déja essayé une première amélioration en chargeant des miniatures dans les cells plutot que les images redimensionnées, et il est certain que cela va beaucoup plus vite.

Mais c'est encore trop long en 3G surtout....

Ces miniatures font 9Ko, sauf qu'il est possible d'avoir a en afficher, 100 voire 150. Et la de suite, ca prend du temps.


Alors voila, je voudrais savoir ce que vous me conseillez pour optimiser l'affichage.

La gamme de conseils que je vous demande est large...


Plus précisément je souhaiterai savoir :

- Ou me conseillez vous de récupérer les flux XML : flux news, flux catégorie1, flux catégorie2.


(sachant qu'il y a aussi des images a afficher dans les tabView des catégories, des petites miniatures...)

- Ou me conseillez vous de récuperer les flux XML : flux image (collectionView) de chaque elements de catégorie1 (et donc de facon similaire, j'adapterai pour la catégorie2).

- Que me conseillez vous de faire lorsque je souhaite afficher un grand nombre de miniature (download au scroll? (c'est l'idée que j'ai à  vrai dire, à  la facebook, mais je ne me suis pas encore renseigné sur comment faire) etc.)


Je tiens à  dire qu'il est possible de prolonger l'affichage de l'image au lancement pour faire du telechargement à  ce moment là .

Aussi, pour être complet, actuellement lorsque l'on clique sur un element de la tabview, un nouveau flux xml, spécifique a cette catégorie, est recherché, parsé, et ensuite utilisé pour l'affichage de la nouvelle vue.


Aussi je précise que pour le moment, je n'ai fait que du chargement synchrone, et je suis en train d'étudier la méthode asynchrone, c'est pour celà  que je me tourne vers vous, savoir ce qui serai vraiment le plus optimiser et ou placer les chargements.



Merci à  tous, et surtout, n'hesitez pas a dire ce qui ne va vraiment pas. Je débute et tout les conseils sont bons à  prendre.



 


Mots clés:

Réponses



  • Je tiens à  dire qu'il est possible de prolonger l'affichage de l'image au lancement pour faire du telechargement à  ce moment là .




     


    Mega mauvaise idée !


     


     


     




     et je suis en train d'étudier la méthode asynchrone




     


    Mega bonne idée !


     


    Sinon, merci de te présenter dans la section adéquate.

  • La présentation, c'est fait!


    Par contre j'ai déja 2 petites questions.

    Pourquoi est-ce mal d'utiliser l'image de chargement (avec peut être une petite barre pour montrer que ca charge) pour charger quelques données? (je pense notamment aux éléments des tables, histoire que la navigation soit directement complete a l'affichage de la première vu de l'application)


    En ce qui concerne le chargement asynchrone, je décortique LazyTable, trouvé parmis les sample code, bonne idée ou non?


  • Chargement d'images + Asynchrone + UITableView, on en a (re)parlé y'a pas trop longtemps...


  • CéroceCéroce Membre, Modérateur
    août 2013 modifié #5

    Pourquoi est-ce mal d'utiliser l'image de chargement (avec peut être une petite barre pour montrer que ca charge) pour charger quelques données? (je pense notamment aux éléments des tables, histoire que la navigation soit directement complete a l'affichage de la première vu de l'application)


    Parce que tu n'es pas certain que les données seront utiles. Par exemple, si on ne va jamais sur l'un des onglets, pourquoi charger les données correspondantes ?

    Par ailleurs, imaginons que tu aies 100 news, combien pourras-tu en afficher à  l'écran ? Une vingtaine maxi. ça veut dire qu'on peut déjà  passer un paramètre au web service qui te renvoie le XML pour lui donner les indices des 20 news qu'on veut afficher. C'est un exemple d'optimisation.
     

    En ce qui concerne le chargement asynchrone, je décortique LazyTable, trouvé parmis les sample code, bonne idée ou non?

    C'est intéressant dans le principe, par contre la mise en oe“uvre est un peu une bidouille à  mon goût (quoique c'est un truc que je fais faire aux stagiaires dans la formation).
    Il faut faire toutes les requêtes de manière asynchrone, parce que bloquer l'interface utilisateur n'est pas une option envisageable.

    Ce que nous conseillons est d'utiliser AFNetworking qui possède une catégorie sur UIImageView qui permet d'effectuer le chargement asynchrone des images très facilement. D'ailleurs, pendant que tu y es, fais toutes tes requêtes réseau avec AFNetworking.
Connectez-vous ou Inscrivez-vous pour répondre.