Parser XML
rockyhorror
Member
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.
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.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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 et développeur de PluXml (2010 à 2018)
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.
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
... comme quoi, le prénom ne suffit pas
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é.
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
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.
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
- 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 et développeur de PluXml (2010 à 2018)
- 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.
J'ai un string de l'array