XML/XSL Probleme de vitesse d'execution Javascript - XML/XSL - Programmation
Marsh Posté le 18-04-2006 à 09:28:30
Pour plus de précisions:
j'ajoute a chaque boucle de génération les evenements "onclick", "onmouseover", "onmouseout" à un <td>.
Il y a environ 150 passages dans boucles.
la page html met environ 3 fois plus de temps à s'afficher par l'ajout
de ces evenements.
Quelqu'un aurait il une idée?
Marsh Posté le 18-04-2006 à 09:54:23
comprends pas exactement
Tu as un flux xml, tu le transformes en html via xsl, jusque là ça va...
Ensuite tu ajoutes tes evenements en js ou alors tes "evenements" ont été ajoutés lors de la transformation?
Marsh Posté le 18-04-2006 à 09:58:46
Mes evenements sont ecrits dans ma feuille xsl.
voici mon code :
<xsl:template match="REFQX">
<xsl:param name="la_ref" select="."/>
<xsl:param name="val_ARTLIB" select="../ITNBR"/>
<xsl:param name="htj" select="../HTJOAX"/>
<xsl:param name="chemin_image" select="../chemin_image"/>
<xsl:param name="prix" select="../TARPU"/>
<xsl:if test="$htj=' ' ">
<td
onclick="window.location='/IntranetJLC/servlet/article?codeArticle={$la_ref}&sessionID={$sessionID}&roleTarif={$roleTarif}&codeDevise={$codeDevise}&typeTarif={$typeTarif}&Langue={$langue}&joaillerie=non&ref6000={$val_ARTLIB}&prix={$prix}' "
onmouseout="HideBulle(this)"
onmouseover="LoadBulle('{$detail}','{$reference}','{$val_ARTLIB}','{$la_ref}','{$chemin_image}',this)"
NOWRAP='1'
width='80'
class="artref" >
<xsl:value-of select="$la_ref" />
</td>
Marsh Posté le 18-04-2006 à 10:10:29
Ok et donc ce qui est lent c'est le "rendu" de la page dans le navigateur?
Alors la réponse à la question: "Est-ce normal qu'une page contenant 150 lignes de tableau mette plus de temps a s'afficher avec des handlers d'evenements sur chacune des lignes que sans ces handlers?"
La réponse est : OUI.
Maintenant as-tu vraiment besoin de javascript??? Ne pourrais-tu pas faire la même chose juste avec des css ( ce qui résoudrait le problème)!
Marsh Posté le 18-04-2006 à 10:31:51
En fait je n'ai pas le choix. je suis obliger d'utiliser javascript car avec css je ne peux pas gerer d'evenements.
Ce qui est long est la transformation avec xslt. Ce code ecrit dans une servlet ou une page php ne prend pas beaucoup de temps.
Je sais pas s'il existe une astuce pour eviter de faire des appels javascipts dans la feuille xsl.
Marsh Posté le 18-04-2006 à 13:07:50
Mais ton xslt il appelle rien du tout , il ecrit juste du texte ... ce que ca represente, lui il s'en fou .. Apres c'est ton navigateur qui va s'en occuper.
Donc si ton probleme est que ça met trop longtemps a ecrire le JS ... bein c'est normal .. tu lui fais ecrire le double . Si c'est l'execution , c'est normal aussi
Marsh Posté le 18-04-2006 à 19:34:20
As-tu vraiment besoin de tous ces attributs dans chaque handler? Des trucs comme sessionID, codeDevise, langue, ...
Tu pourrais avoir une fonction javascript unique qui fait le window.location en passant les quelques paramètres qui changent.
Marsh Posté le 19-04-2006 à 17:45:43
Je pense ne pas avoir été clair et precis:
voici le debut de ma feuille xslt
Code :
|
On peux remarquer que je fais appel a un ficier de fonction javascript "classificationHTML.js"
dont voici le code
Code :
|
Voici la partie de ma feuille xsl qui fait appel aux fonctions
Code :
|
On peut remarquer que j'ai reduit les parametres des fonction javascripts
le template "DSLNG" est appele 150 fois environ
Mon probleme est que les deux lignes :
onmouseover="LoadBulle('{$refQ}','{$chemin_image}',this)"
onmouseout="HideBulle(this)" >
me font perdre 3 fois plus de temps a l'affichage.
je ne comprends pas pourquoi.
le meme code sans transformation XML->HTML avec xslt est rapide
je vous remercie de vos réponses.
Marsh Posté le 20-04-2006 à 00:16:57
Et sinon ca sert à quoi à part être extrèmement compliqué surement pour rien ?
Marsh Posté le 18-04-2006 à 08:36:21
Bonjour,
Dans une feuille de transformation XSL générant du HTML,
j'ai une perte considerable de temps d'execution par l'ajout
d'evenements javascript dans un <td>.
J'espere de pas etre le seul a avoir rencontrer ce probleme
Merci d'avance