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

Bibliothèques et frameworks PHP Discussion :

[DOM][SimpleXML] Performances ?


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 17
    Par défaut [DOM][SimpleXML] Performances ?
    Bonjour,

    j'essaie de parser de manière très basique un fichier XML, et j'obtiens des performances catastrophiques (dans les 5 secondes pour traiter un fichier qui met moins de 0,1 secondes pour être parsé de la même manière en excel vba, la honte...).

    Les deux approches sonts ci dessous, elles sont toutes les deux aussi lentes. Auriez vous des idées pour accélerer les traitements ?

    Variante DOM :
    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
    23
     
    function parserListeValeursXML($urlfichier,$nom_champ) {
    	//objets et variables
    	$tableauRetour = array();
    	$index = 0;
     
    	//chargement
    	$dom = DOMDocument::load($urlfichier);
    	if(!$dom) die('Erreur lecture fichier XML');
    	$racine=$dom->getElementsByTagName('Liste_valeurs')->item(0);
    	$listeEnregistrements = $dom->getElementsByTagName('enregistrement');
     
    	//parcours des objets
    	if (count($listeEnregistrements) > 0) {
    		foreach ($listeEnregistrements as $enregistrement) {
    			$tableauRetour[$index] = $enregistrement->nodeValue;
    			$index = $index + 1 ;
    		}
    		return($tableauRetour);
    	} else {
    		return(false);
    	}
    }
    Variante SimpleXML :
    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
    23
     
    function parserListeValeursXML($urlfichier,$nom_champ) {
    	//objets et variables
    	$tableauRetour = array();
    	$index = 0;
     
    	//lecture et chargement chargement
    	$handle = fopen($urlfichier,'r');
    	$xmlbrut = '';  
    	while (!feof($handle)) {  
    		$xmlbrut .= fread($handle, 1024);  
    	}  
    	fclose($handle);	
    	$xml=simplexml_load_string($xmlbrut);
    	if(!$xml) die('Erreur lecture fichier XML');
     
    	//parcours des objets
    	foreach ($xml->enregistrement as $item) {
    		$tableauRetour[$index] = $item->$nom_champ;
    		$index = $index + 1 ;
    	}
    	return($tableauRetour);
    }

    Mille Mercis !

  2. #2
    Invité
    Invité(e)
    Par défaut


    C'est étonnant cette histoire de perf...
    • Quelle est la taille de ton fichier ? La profondeur max de l'arbre XML ?
    • Quel est ton OS ? Ta version de PHP ?
    • De quelle manière accèdes-tu au fichier ? Si c'est via HTTP, as-tu vérifié que ce n'est pas simplement le download qui est très lent ?

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Qu'un traitement php soit plus long cela peut se concevoir mais je serais prêt à parier que la troisième proposition de David Guillot est la bonne... pour que le traitement seul dure cinq secondes il faudrait que le fichier soit énorme et si ce n'est pas le cas cela ne peut être qu'un problème de temps de chargement du fichier.

  4. #4
    Membre averti
    Inscrit en
    Février 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 17
    Par défaut
    Le fichier fait dans les 3ko, profondeur sur 2 niveaux.

    Comme tout est en localhost pour l'instant, sur une machine relativement récente, je pars sur l'hypothèse que ce n'est pas un problème de téléchargement.

    Remarque : ni le CPU ni la conso de mémoire ne s'affolent pendant le traitement, c'est plutôt l'encéphalogramme plat...

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    étrange...
    SimpleXml est bâti sur DOMDocument donc c'est kif-kif.
    Pour en avoir le coeur net pose des timers autour de $dom = DOMDocument::load($urlfichier); et poste le temps de chargement.

  6. #6
    Membre averti
    Inscrit en
    Février 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 17
    Par défaut
    Voila : 6 secondes pour le DOMDocument::load

    Pour info le fichier parsé fait dans les 1,5ko et comprends 21 champs comme ci dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     <?xml version="1.0" encoding="ISO-8859-1" ?> 
    <Liste_valeurs nbEnregistrements="21">
    <enregistrement>
      <Societe> tagada</Societe>
    </enregistrement>
    ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SimpleXML] Copier un noeud pour le renommer, problème format DOM -> SimpleXML
    Par phoenix420 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 15/08/2013, 18h36
  2. [XML] impossible d'utiliser dom,simplexml,domxml en local
    Par gilbertbicot dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 26/02/2009, 10h12
  3. [XML] [EXPAT/DOM/SimpleXML/SAX] Que faire ?
    Par titoff85 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 10/08/2007, 09h25
  4. Performances SimpleXML / MySQL
    Par Benji76 dans le forum Langage
    Réponses: 1
    Dernier message: 11/01/2007, 22h29
  5. [SimpleXML] [DOM] Ajouter un attribut
    Par Klimium dans le forum Bibliothèques et frameworks
    Réponses: 45
    Dernier message: 14/12/2006, 12h56

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