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

XSL/XSLT/XPATH XML Discussion :

performance


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 74
    Points : 36
    Points
    36
    Par défaut [Résolu] performance
    Bonjour, simple question :

    j'ai un annauire XML / XSLT c'est uniquement de la consultation.

    le "soucis" c'est que lorsque je crée un raccourci de la page HTML sur mon propre poste, ca rame bcp plus que lorsque je le lance de son emplacement.

    Ca me parait assez bizarre

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 331
    Points : 15 675
    Points
    15 675
    Par défaut
    tu fait la transformation XSL avec quoi ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    cad ??? avec le navigateur (IE5.5) et msxml 3.0

    en gros mon annuaire, à chaque transformation (treeview, tri) met 1-2 secondes à se charger... et ca me fait hésiter à basculer sur une BDD :

  4. #4
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    le "soucis" c'est que lorsque je crée un raccourci de la page HTML sur mon propre poste, ca rame bcp plus que lorsque je le lance de son emplacement
    Si la page est déjà générée en html (car tu possèdes un lien vers cette page sur ton poste), ca ne peut pas venir de ton processeur XSL...

    Cela étant dit, quel est la taille du fichier html? parce-que le transport réseau à un coût...surtout si ton réseau est lent.

    en gros mon annuaire, à chaque transformation (treeview, tri) met 1-2 secondes à se charger
    Alors là maintenant c'est le fichier xml que tu ouvres et plus le fichier html... ce n'est pas très clair.

    Expliques-toi un peu mieux et tu auras une solution...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    en fait j'ai un fichier html ou j'ai :

    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
     
    var xslt = new ActiveXObject("Msxml2.XSLTemplate.3.0"); 
    	var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0"); 
    	var xslProc;
     
    	xslDoc.async = false; 
    	xslDoc.load("annuaire.xsl"); 
    	xslt.stylesheet = xslDoc; 
    	var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0"); 
    	xmlDoc.async = false; 
    	xmlDoc.load("annuaire.xml"); 
    	xslProc = xslt.createProcessor(); 
    	xslProc.input = xmlDoc; 
    	//**Parametres pour tri**
    	xslProc.addParameter("rubrique", rubrique); 
    	xslProc.addParameter("order", order); 
    	//** Lance la transformation**
    	xslProc.transform(); 
    	MonDiv.innerHTML = xslProc.output
    et donc deja la ca charge 2 secondes...

    ensuite a chaque transformation ca met 1à2 secondes...

  6. #6
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    ok, donc la lenteur provient de ta feuille xslt, de la taille du fichier xml, ou des deux combinés. En effet les algos de sélection avec xslt sont souvent très couteux, surtout si tu utilises les tris. Je pourrais t'indiquer quelles sont les parties à optimiser si tu donnes ta feuilles xslt...

  7. #7
    Nouveau membre du Club
    Inscrit en
    Octobre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    ok je peux te l'envoyer par mail ????

  8. #8
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    non il faudrait la placer dans le thread afin que tout le monde puisse participer. Pourrais-tu également stp donner la taille et un extrait de ton fichier xml afin d'avoir tous les éléments pour répondre?

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    Extrait du fichier XML

    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
    24
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <REPERTOIRE>
    <PERSONNE>
    <NOM>Tintin</NOM>
    <PRENOM>Milou</PRENOM>
    <SERVICE>ACHATS Softs</SERVICE>
    <LOCALISATION>Paris</LOCALISATION>
    <TELEPHONE>01 xx xx xx xx</TELEPHONE>
    <PORTABLE>06 xx xx xx xx</PORTABLE>
    <FAX>01 xx xx xx xx</FAX>
    </PERSONNE>
    <PERSONNE>
    <NOM>Durand</NOM>
    <PRENOM>toto</PRENOM>
    <SERVICE>Hot line</SERVICE>
    <LOCALISATION>BUSSY ST GEORGES</LOCALISATION>
    <TELEPHONE>01 xx xx xx xx</TELEPHONE>
    <PORTABLE></PORTABLE>
    <FAX></FAX>
    </PERSONNE>
    .......
     
    </REPERTOIRE>
    J'ai + ou - 1000 personnes dans le fichier

    fichier XSLT pour le tri

    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
    24
    25
    26
    27
    28
    29
     
    <?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    	<xsl:output method="xml" indent="yes"/>
     
    	<xsl:param name="rubrique"/>
    	<xsl:param name="order"/>
     
    	<!--  [TRIE LES DATAS EN FONCTION DES PARAMETRES]  	-->
    	<xsl:template match="/">	
    	<REPERTOIRE>
    		<xsl:apply-templates select="REPERTOIRE/PERSONNE">
    			<xsl:sort select="*[name()=$rubrique]" order="{$order}" />
    		</xsl:apply-templates>
    	</REPERTOIRE>
    	</xsl:template>
     
    	<!-- [COPIE RECURSIVEMENT TS LES NOEUDS] -->
    	<xsl:template match="REPERTOIRE">
    		<xsl:copy>
    			<xsl:apply-templates/>
    		</xsl:copy>
    	</xsl:template>
    	<xsl:template match="node()">
    		<xsl:copy>
    			<xsl:apply-templates select="node()"/>
    		</xsl:copy>
    	</xsl:template> 
    </xsl:stylesheet>

    fichier XSLT pour le treeview

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    <?xml version='1.0' encoding="ISO-8859-1"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
     
    	<!-- ****************** [Variables] **********************-->
    	<!-- variable "deploy-treeview", boolean - mettre a true if pour deployer a l'affichage initial -->
    	<xsl:variable name="deploy-treeview" select="/treeview/custom-parameters/param[@name='deploy-treeview']/@value"/>
    	<xsl:variable name="shift-width" select="/treeview/custom-parameters/param[@name='shift-width']/@value"/>
     
    	<xsl:template match="/"> 
     
    		<!-- Tableau en-tête de colonnes -->
    		<table align="center" style="BORDER-COLLAPSE: collapse" width="100%" CELLSPACING="0" border="0" rules="rows">
    			<tr>
    				<td  bgcolor="#0069B3">
    					<th width="14%" id="HeaderColumnNOM" onclick="javascript:tri2('NOM')" align="left">NOM</th>
    			   	   	<th width="14%" id="HeaderColumnPRENOM" onclick="javascript:tri2('PRENOM');" align="left">PRENOM</th>
    				     <th width="14%" id="HeaderColumnSERVICE" onclick="javascript:Tree('SERVICE');" align="left">SERVICE</th>
    			        	<th width="14%" id="HeaderColumnLOCALISATION" onclick="javascript:Tree('LOCALISATION');" align="left">LOCALISATION</th>
    			        	<th width="14%" id="HeaderColumnTELEPHONE" onclick="javascript:tri2('TELEPHONE');" align="left">TELEPHONE</th>
    			        	<th width="14%" id="HeaderColumnPORTABLE" onclick="javascript:tri2('PORTABLE');" align="left">PORTABLE</th>         
    					<th width="14%" id="HeaderColumnFAX" onclick="javascript:tri2('FAX');" align="left">FAX</th>
    				</td>
    			</tr>
    		</table>
     
    		<!-- Tableau de chaque localisation -->
    		<table border="0" id="Tableau1" width="98%" align="right">
    			<tr>
    			   	<td>	
    					<a onclick="javascript:toggle(this)" >
    						<img src="include/Images/Minus.gif"/>
    						<xsl:value-of select="REPERTOIRE/PERSONNE/LOCALISATION"/>
    					</a>
    					<!--[<DIV> obligatoire pour plier/deplier]-->
    					<xsl:text disable-output-escaping="yes">&lt;div&gt;</xsl:text>
     
    					<!--[Balise <TABLE>]-->
    <!--	 				<xsl:text disable-output-escaping="yes">&lt;table align="center" style="BORDER-COLLAPSE: collapse" width="100%" height="100%" CELLSPACING="0" border="1" rules="rows"&gt;</xsl:text>-->
    					<xsl:text disable-output-escaping="yes">&lt;table align="center" style="BORDER-COLLAPSE: collapse" width="100%" height="100%" CELLSPACING="0" border="1" rules="groups"&gt;</xsl:text>
     
     
    					<xsl:for-each select="REPERTOIRE/PERSONNE"> 
    					   <tr onMouseOver="this.bgColor='#E6E6E6';" onMouseOut="this.bgColor='#FFFFFF';">
    					 	<td width="14%"><b><xsl:value-of select="NOM"/></b></td>
    							<td width="14%"><xsl:value-of select="PRENOM"/></td>
    							<td width="14%"><xsl:value-of select="SERVICE"/></td>
    							<td width="14%"><xsl:value-of select="LOCALISATION"/></td>
    							<td width="14%"><xsl:value-of select="TELEPHONE"/></td>
    							<td width="14%"><xsl:value-of select="PORTABLE"/></td>
    							<td width="14%"><xsl:value-of select="FAX"/></td>
    						</tr>
     
    						<xsl:if test="string(LOCALISATION)!=string(following-sibling::*[1]/LOCALISATION) and string(following-sibling::*[1]/LOCALISATION) !=''">
    							<!--[Balise </TABLE></DIV>]-->				
    							<xsl:text disable-output-escaping="yes">&lt;/table&gt;&lt;/div&gt;</xsl:text>								
     
    							<!--[Balise </TD></TR><TR><TD>]-->
    							<xsl:text disable-output-escaping="yes">&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;</xsl:text>
    							<br/>
    							<a onclick="javascript:toggle(this)" ><img src="Include/Images/Minus.gif"/><xsl:value-of select="following-sibling::*[1]/LOCALISATION"/></a>
     
    							<!--[Balise <DIV><TABLE>]-->
    							<xsl:text disable-output-escaping="yes">&lt;div&gt;&lt;table align="center" style="BORDER-COLLAPSE: collapse" width="100%" height="100%" CELLSPACING="0" border="1" rules="groups"&gt;</xsl:text>
    						</xsl:if> 
    					</xsl:for-each>	
    					<!--[Balise </TABLE></DIV>]-->
    							<xsl:text disable-output-escaping="yes">&lt;/table&gt;&lt;/div&gt;</xsl:text>
    	  			</td>
    	   		</tr>
    		</table>
    	<!--</td></tr></table>-->
    	</xsl:template> 
    </xsl:stylesheet>

  10. #10
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    J'ai reconstruit un annuaire de 1000 personnes avec des copier-coller à partir de l'extrait que tu en as donné.

    j'ai appliquer successivement les deux transformations (tri et formattage en html) et apparemment c'est la deuxième transformations qui est la plus lente.
    Mais cela reste acceptable : environ une seconde sur ma machine (P4 1.7GHz)

    Tes feuilles XSLT ne font pas appel à des sélections complexes, simplement ici c'est la taille du fichier XML qui doit jouer.

    Une première facon d'optimiser les performances serait de créer un composant serveur en ASP ou Servlet/JSP qui effectuerait les mêmes transformations. C'est assez facile à faire et le bénéfice est qu'au lancement du serveur ou à la première connexion tu crées le processeur et compiles les feuilles XSLT une fois pour toute en mémoire, et pas à chaque fois que l'utilisateur décide de retrier.
    De plus il serait intéressant de comparer les performances de MSXML avec Xalan (Apache.org), ca provient peut-être d'une faiblesse du processeur de microsoft.

    Maintenant si ca ne change toujours rien, alors il faudra peut-être créer un mécanisme de cache : les pages sont calculées une fois pour toute et réutilisée. Cela est possible car ton annuaire est en lecture seule, donc pas de problème de mise à jour. Il te suffit de pré-transformer les pages pour tous les tris possibles. Si tu as 10 champs par personne, ca te fera 20 pages (tri dans les 2 sens) par exemple. Ok ca ne marche plus très bien si tu t'amuses à modifier l'annuaire en cours d'exécution !

    Autres solution : tu limites l'affichage de l'annuaire. La c'est plutot de l'ordre du fonctionnel : un utilisateur n'aura pas accés directement à tous l'annuaire, mais uniquement aux 50 premières personnes. Les autres seront accessibles avec un mécanisme de pages 50 par 50...
    Dans un annuaire, l'utilisateur souhaite rarement voir l'intégralité des données mais recherche souvent une personne en particulier. Un mécanisme de recherche serait donc l'idéal : accès par début de nom ou prénom, recherche sélective...

    Personnellement je choisirais cette voie la...

    a+

  11. #11
    Nouveau membre du Club
    Inscrit en
    Octobre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    Merci bcp !!!

    je voulais surtout savoir si j'avais pas commis des énormités dans mon code. J'attends le retour des utilisateurs et j'agirais en fonction...

    - C'est une nouvelle question, comment faire pour permettre aux utilisateurs de mettre ç jour l'annuaire ???

    Merci d'avance,

    Marc

  12. #12
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    - C'est une nouvelle question, comment faire pour permettre aux utilisateurs de mettre ç jour l'annuaire ???
    ok donc déjà on peut oublier le mécanisme de cache

    Pour mettre à jour, tu devras centraliser le traitement sur un serveur, c'est plus simple. Tu dois donc écrire un composant serveur qui recoit des requetes de modifs des utilisateurs (via des formulaires HTML) et modifie le document XML en conséquence. Alors la vu que ton annuaire n'est pas très gros, il vaut mieux parser ton document dans un arbre DOM. Toutes les modifs se feront en mémoire avec l'API DOM ou XPATH (personnellement cette dernière est plus conviviale). Il suffira juste de changer la source de ton processeur XSLT : au lieu d'un fichier ce sera un arbre DOM. De temps en temps, il faudra sérialiser entièrement ton arbre DOM sur disque (dans un fichier XML) afin d'éviter les mauvaises surprises.

    Si tu as le temps, tu pourras optimiser la sérialisation pour pouvoir l'effectuer après chaque requête, par ex en ajoutant, modifiant ou supprimant juste ce qui est nécessaire.

    L'idéal serait de ne pas avoir un arbre DOM entier en mémoire car il en est très consommateur (il faut compter environ 10 fois la taille du fichier XML). D'ou la necessité d'avoir une bonne sérialisation, mais la on entre dans le domaine de la base de donnée XML... et ce n'est pas vraiment le but de ton appli...

    a+

  13. #13
    Nouveau membre du Club
    Inscrit en
    Octobre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    merci de toutes ces précisons, mais là je suis comment dire ... un peu perdu

    - Donc actuellement le fichier HTML,XML et les XSL sont centralisés sur un serveur ...

    - des requêtes de quel type ??

    - arbre DOM as tu des liens ou exemples ?

    - La sérialisation kesako ?

  14. #14
    Membre émérite

    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Points : 2 717
    Points
    2 717
    Par défaut
    C normal que ce soit lent. Ton client doit charger le fichier XML et le fichier XSL ... Pourquoi ne pas tout faire un niveau du serveur ? Le serveur est le seul à avoir accès au XML et XSL, et toi tu envoies des requêtes, et reçoit du HTML en échange ;-)

    G pas trop compris si tu bosses hors-ligne (réseau local) ou en ligne. Si tu veux bosser sur Internet, tu peux aller sur les pages perso Free.fr par exemple. Je viens d'installer un site en PHP, XML, XSL et CSS. Et le tout fonctionne à merveille :
    http://haypo.free.fr/
    (pas de pub merci ...)

    PHP contient le moteur XSLT Sablotron (marche très bien).

    @+ Haypo

  15. #15
    Nouveau membre du Club
    Inscrit en
    Octobre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    c'est en intranet !!!

    J'ai juste du XML / XSL ... pas de langage client/serveur... je vais peut être obligé car je dois maintenant prévoir la mise à jour de mon annuaire, donc du fichier XML

  16. #16
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 331
    Points : 15 675
    Points
    15 675
    Par défaut
    tu peut aussi utilliser PHP sur ton intranet pour faire ta transformation XSL
    http://fr.php.net/xslt

  17. #17
    Nouveau membre du Club
    Inscrit en
    Octobre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    Merci de tes précieuses infos... mais je suis contraint d'utiliser ASP dans ma boîte, donc je suis en train de tt faire en ASP...

    j'ai ouvert un autre topic pour l'utilisation du DOM donc je vais mettre résolu.

    Merci encore

  18. #18
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 331
    Points : 15 675
    Points
    15 675
    Par défaut
    tu peut aussi faire ca en ASP c'est sur
    n'hésite pas à faire ca du coté serveur ca sera beaucoup mieux pour les utilisateurs

  19. #19
    Nouveau membre du Club
    Inscrit en
    Octobre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 74
    Points : 36
    Points
    36
    Par défaut
    ouais c'est ce que je fais mais je galère pas mal !!!!!

    en fait, je cherche à parcourir le DOM et à afficher les infos d'un contact et de permettre de les modifier :

  20. #20
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour, ce post est trés intéréssant. Je debut en xslt/xml et je voudrais bien réaliser ce type d'annuaire pourriez vous m'envoyer vos fichier xslt et html par mail ou bien les poster ? Merci

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

Discussions similaires

  1. [maintenance][performance] Que faire comme maintenance ?
    Par woodwai dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 06/11/2003, 15h39
  2. Performance xml
    Par MicKCanE dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 07/07/2003, 06h41
  3. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 16h18
  4. [JDBC][connexion persistante] performances avec JDBC
    Par nawac dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 06/05/2003, 10h37
  5. performance entre 3DS, ase, asc ...
    Par amaury pouly dans le forum OpenGL
    Réponses: 3
    Dernier message: 24/03/2003, 11h41

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