Parser XML

Bonjour,

PluXml s'appui sur l'extension php "XML parser" pour lire les fichiers XML.
Depuis la version 5.0.1 de PHP, il existe l'extension SimpleXML, qui simplifie considérablement le code à écrire pour lire un fichier XML, et semble pour les tests que j'ai pu faire, plus rapide et moins gourmande en mémoire.
Avez vous un retour d'expérience la dessus ? Est-ce qu'il ne serait pas intéressant d'utiliser SimpleXML dans Pluxml.

Au besoin je me porte volontaire pour faire des tests complémentaires, ou aider à porter les fonctions du core vers cette extension.

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour
    SimpleXml n'est pas déployé sur tous les hébergeurs, vu que c'est une extension php. Donc ce serait un mauvais choix.
    En terme de rapidité ça reste à tester

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • D'après la doc PHP, "XML Parser" et "SimpleXML" sont toute les deux des extensions externes à PHP. Elles n'ont pour seule dépendance que la libxml active par défaut.
    Il est quand même probable que SimpleXML soit actif au même titre que XML Parser. ça reste bien sûr à vérifier, mais SimpleXML semble être le parser XML le plus plébiscité lorsque l'on creuse sur google.

    Concernant la rapidité, les tests que j'ai pu faire sont les suivants:
    - chargement d'un fichier XML de 1,8M (structure du fichier: <ComicsCatalog><SERIE name="nome de la serie"><COMIC id="1"><TITLE></TITLE><COMIC>...</SERIE>.../ComicsCatallog>, représente ~200 series, et 1300 comics)
    - création d'un tableau constitué de la liste des series

    J'ai testé avec les 3 parser XML dispos: DOM, XML Parser, SimpleXML, résultats (temps d'execution, Mémoire utilisée):
    - DOM: 0.164s, 51704Bytes
    - XML Parser:0.522s, 47550504Bytes
    - SimpleXML: 0.156s, 35660Bytes

    Sans compter que le code à produire pour utiliser SimpleXml, est quand même beaucoup plus simple que XML Parser, qui reste un peu flou avec ses $iTags, et $values

    Bon évidemment tout ça demande réflexion, mais il serait dommage de se fermer la porte là dessus.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Effectivement très intéressant tout ça: à étudier plus en détails. Il y a vraiment des gains à faire au niveau perf si tout se confirme.

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Très intéressant, pluXml qui pourrais être encore plus rapide qu'il l'est déjà? Faudra changer le logo pour une fusée !
  • Ben moi, je comprend rien !

    ... comme quoi, le prénom ne suffit pas :D
  • Bonjour à tous,

    Voici les résultats des tests que j'ai pu faire.
    J'ai modifié la classe plxMotor pour utiliser simpleXml dans la plupart des fonctions.

    Le gain en performance n'est pas vraiment significatif, le temps de génération des pages reste sensiblement le même. Cela est dû je pense à la relative petitesse des fichiers gérés par pluxml. Le gain est meilleur sur des fichiers plus complexes et plus gros.
    En revanche au niveau mémoire, on y gagne. Bon c'est pas facile de l'estimer sur l'ensemble du blog, mais si je prend le cas de la fonction "parseArticle" on obtient quelque chose comme ça:
    - XML parser: Memory: 23404 bytes ; Peak: 779704 bytes
    - simpleXml: Memory: 3660 bytes ; Peak: 718632 bytes

    Les tests ont été faits avec une homepage affichant 50 articles (générés avec myloremipsum).

    Pour les curieux et les testeurs, voici un lien pour récupérer la version modifié du fichier: class.plx.motor
    Attention, c'est une version de test, il peut rester des bugs, donc à utiliser avec précautions.

    Au niveau du code, vous pourrez voir qu'il est quand meme plus simple, et relativement plus facile à appréhender que tout les iTags et autre.

    Pour ceux qui auront le courage de tester, n'hésitez pas à nous dire si ça marche, ou pas du tout, si vous voyez une amélioration quelconque ou pas.

    Bref, pluXml portant bien son nom, les voies d'améliorations sont difficile à trouver tant c'est déjà optimisé.
  • Bonjour,

    Intéressant le gain d'utilisation mémoire, sur des petits serveurs c'est une bonne piste.

    Lorsque j'ai commencé à dev des plugins pour PluXml j'avais fais des essais avec SimpleXML et effectivement la lecture du code et la compréhension est bien plus simple qu'avec le parser actuel. L'autre avantage serait peut être une réduction du nombre de ligne de code de PluXML ?

    L'autre point à prendre en considération, pendant combien de temps le parser actuel sera maintenue dans php ?

    J'ai un string de l'array

  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    Bonjour,

    Peut-être la multiplicité de petits fichiers XML est pénalisante avec de trop nombreux accès disque pour des fichiers éparpillés sur les pistes.
    Une idée serait de rassembler tous ces petits en un fichier XML plus gros avec une arborescence plus étendue et d'utiliser Xpath pour sortir les infos utiles.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Les points positifs qui m'intéressent sont:
    - vitesse de traitement
    - gain mémoire
    - moins de ligne de code
    - meilleure lisibilité du code
    J'aimerais mettre dans la balance les cotés négatifs: si vous avez des arguments...

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • J'utilise SimpleXml depuis pas mal de temps, c'est du tout bon.
  • Pour les inconvénients il n'y en à pas beaucoup, je dirais:
    - Réécriture du code (fastidieux mais pas insurmontable)
    - Le fichier xml est parsé sous forme d'une structure d'objet simpleXml, ce qui nécessite de faire un cast des objets dans certain cas.

    Sinon, je vois pas.
  • Pour avoir bricoler un peu SimpleXml et pas mal le parser de PluXml je vois pas d'objection à passer sur SimpleXML.

    J'ai un string de l'array

Connectez-vous ou Inscrivez-vous pour répondre.