IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Très gros XML et ActionScript 3 ?


Sujet :

ActionScript 3

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Par défaut Très gros XML et ActionScript 3 ?
    Bonjour,
    J'ai parcouru pas mal de pages du forum sans trouver réponse à ma question/mon problème.

    Présentation du projet :
    Créer un dictionnaire français/anglais technique avec des illustrations pour une bonne partie des termes traduits.

    Question :
    Il ne s'agit pas ici d'un souci de fonctionnement, pour l'instant (car je tatonne puisque je découvre flash et l'as3) tout fonctionne et avance comme je le souhaite.
    Il s'agit d'un problème de temps de chargement du fichier XML. Il contient en gros 50 000 lignes et n'est pas encore complet. Il n'y a que les mots, leur traduction, et une variable pour l'image sur chaque ligne. A terme je devrai y ajouter une 20aine de variables par ligne et la définition du terme.

    Exemple actuel :
    <Word Mot="Abbreviated departure clearance" Img="00001">Autorisation IFR qui ne spécifie pas l'intégralité de la route (au regard d'un plan de vol déposé)</Word>

    Donc 50 000 lignes comme ça.

    Avec le code ci dessous, je charge le fichier XML et je stocke les valeurs dans des Arrays. Avec 100 lignes c'est super, avec 20 000 lignes, 30 minutes après le lancement de mon animation, c'était toujours pas fini de charger ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    //Chargement du XML
    function chargeXML() {
    	var chargementXML:URLLoader = new URLLoader();
    	var fichierXML:URLRequest = new URLRequest("XML/Dictionary.xml");
    	chargementXML.addEventListener(Event.COMPLETE, chargeListeMots);
    	chargementXML.load(fichierXML);
    }
    //Remplissage du tableau de mots
    function chargeListeMots(e:Event):void {
    	tableauMots = new Array();
    	var dataXML:XML = new XML(e.target.data);
    	var listeElements:XMLList = dataXML.elements();
    	for each (var elementXML:XML in listeElements) {
    		tableauDetail = new Array();
    		tableauDetail[0] = elementXML.@Mot;
    		tableauDetail[1] = elementXML.@Img;
    		tableauDetail[2] = elementXML;
    		tableauMots.push(tableauDetail);
    	}
    	remplissageListe();
    }
    En gros, vous l'aurez compris, je me demande comment je peux réduire de manière très très très très significative le temps de chargement de mes 50 000 lignes de vocabulaire.

    Dois-je changer de principe (pas de fichier XML ou autre) ?
    Dois-je changer ma façon de gérer ce que je reçois du XML ?

    Si l'un(e) de vous avait une idée, ça serait super chouette.
    D'avance merci.

    Nico

  2. #2
    Rédacteur

    Avatar de The_Pretender
    Homme Profil pro
    Formateur Développement / Programmation
    Inscrit en
    Juin 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Formateur Développement / Programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2004
    Messages : 739
    Par défaut
    Bonjour,

    Tu devrais scinder ton fichier xml en plusieurs plus petit.

    Par exemple un fichier xml par lettre de l'alphabet.

    a.xml contient tous les mots commençant par a
    b.xml tous les mots commençant par b...

    En fonction du mot tu charges le fichier xml correct.

    Sinon pour réduire de plus de la moitié tes fichiers xml, tu devrais utiliser des fichiers eden à la place. Très facile à créer et à implémenter.

    Le site du framework AS2, AS3 : http://code.google.com/p/vegas/
    Les tutoriels en français : http://www.ekameleon.net/blog/index.php
    Réclamez La Méthode Développement Facile pour Créer Rapidement des Applications Performantes sur Mobiles et Ordinateurs : Développement Facile

    Développez des Applications Web Performantes avec la Formation Vidéos Developpez : Programmation Facile

    Découvrez : Tutoriels, ressources AS2 et AS3

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Par défaut
    Bonjour The_Pretender, merci pour ta réponse.
    Pour ce qui est du fractionnement des fichiers, c'est la premiere chose que j'ai envisagée mais ça ne résoud qu'une petite part du souci. Pour la lettre S par exemple, il devrait y avoir genre 4 000 lignes, donc si c'est pour que ca mette 10 minutes à charger, c'est pas la peine.
    De plus, pour une fonction de recherche, j'ai besoin d'avoir la totalité des mots à disposition.

    Je vais regarder un peu le truc Eden que tu proposes là. Mais de prime abord (j'ai lu ce qui se dit dans les deux liens là) je comprends pas de quoi il s'agit.

  4. #4
    Rédacteur

    Avatar de The_Pretender
    Homme Profil pro
    Formateur Développement / Programmation
    Inscrit en
    Juin 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Formateur Développement / Programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2004
    Messages : 739
    Par défaut
    Une autre solution : tu couples ton flash à une base de données via amfphp.

    C'est à dire : flash envoie la requète de recherche dans la BDD via AMFPHP (il faut créer ta classe php pour effectuer le traitement, les requètes SQL).

    Ensuite php te renvoie la réponse (à Flash) via AMFPHP.

    L'utilisation d'une base de données est ce qu'il y a de plus rapide et de plus optimisé.

    Il te faut donc effectuer une analyse correcte pour répartir les données de tes fichiers xml dans les différentes tables.
    Réclamez La Méthode Développement Facile pour Créer Rapidement des Applications Performantes sur Mobiles et Ordinateurs : Développement Facile

    Développez des Applications Web Performantes avec la Formation Vidéos Developpez : Programmation Facile

    Découvrez : Tutoriels, ressources AS2 et AS3

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Par défaut
    Ok, je viens de regarder un peu comment ça fonctionne. Ca m'a l'air plus accessible pour moi déja comme solution.

    Confirmes tu que je gagnerai beaucoup de temps pour charger par exemple mes 4 000 mots commençant par S dans mon textfield dynamique ?

    Et du coup, ce qui va se passer c'est que, quand on va cliquer sur un mot dans le textfield, je vais devoir aller chercher la traduction du mot dans la base de données ?

    Désolé si mes questions paraissent un peu bebetes, mais je découvre tout ça.

  6. #6
    Rédacteur

    Avatar de The_Pretender
    Homme Profil pro
    Formateur Développement / Programmation
    Inscrit en
    Juin 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Formateur Développement / Programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2004
    Messages : 739
    Par défaut
    Citation Envoyé par Coxni Voir le message
    Ok, je viens de regarder un peu comment ça fonctionne. Ca m'a l'air plus accessible pour moi déja comme solution.

    Confirmes tu que je gagnerai beaucoup de temps pour charger par exemple mes 4 000 mots commençant par S dans mon textfield dynamique ?

    Pour gagner du temps, tout dépendra de ton analyse pour stocker les infos dans ta base de données, ce qui déterminera le temps sera le temps de réponse de ta requête.

    C'est une mauvaise idée de charger 4000 mots dans ton textfield dynamiques. Cela engendre des temps de traitement inutile et alourdit ton application.

    Tu peux proposer le chargement des mots automatiques au bout de 3 ou 4 lettres tapées par l'utilisateur. Limiter les résultats au 100 premiers mots sera bien.

    Pour une recherche sur un mot particulier, cela ne pose aucun problème de ralentissement ou autre d'envoyer les données complètes à flash (le mot traduit avec sa description).

    Et du coup, ce qui va se passer c'est que, quand on va cliquer sur un mot dans le textfield, je vais devoir aller chercher la traduction du mot dans la base de données ?
    En gros c'est ça.

    Effectue une analyse en structurant bien tes tables. Séparer les données par groupes dans plusieurs tables par exemple.
    Réclamez La Méthode Développement Facile pour Créer Rapidement des Applications Performantes sur Mobiles et Ordinateurs : Développement Facile

    Développez des Applications Web Performantes avec la Formation Vidéos Developpez : Programmation Facile

    Découvrez : Tutoriels, ressources AS2 et AS3

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Par défaut
    L'intérêt de charger les mots (bon 4 000 j'ai peut etre un peu fumé car il y aura des filtres en fonction de l'activité du gars qui consulte donc ca va réduire la liste de mots affichés) c'est de présenter le truc sensiblement comme dans cet exemple :

    http://www.inanyus.com/2005/02/xml-b...ash-dictionary

    Avec en plus une illustration et à terme la possibilité d'avoir du son. Mais l'illustration et le son ne posent aucun souci.

    Donc par la porte ou par la fenêtre, il faut que je trouve une solution propre pour afficher ça.

  8. #8
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut
    tu devrais activer la compression GZIP sur le serveur ou la forcer avec un script (PHP : http://fr3.php.net/manual/fr/function.gzcompress.php) vu que le texte ce compresse très très bien ...

    ex : 5Mo = 500Ko aprés compression

    par contre reste le temps de traitement du XML dans Flash qui ne sera pas réglé, il aurait mieux fallu passer par du binaire (comme expliqué par pretender avec AMFphp) > moins lourd et + rapide !

Discussions similaires

  1. Splitter de très gros XML
    Par virgul dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 09/03/2009, 12h42
  2. [CSV] Traitement d'un très gros fichier XML ou CSV
    Par Paulux1 dans le forum Langage
    Réponses: 3
    Dernier message: 25/03/2008, 16h05
  3. [SimpleXML] Analyser un très gros fichier XML
    Par Paulux1 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 20/02/2008, 02h53
  4. Ouvrir un très gros fichier XML
    Par strat0 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 02/11/2007, 13h29
  5. Transformer un très gros fichier XML avec XSL
    Par wozzz dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 30/05/2006, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo