(re)Bonjour,

J'ai de gros pbs de performances sur un script (dans une série de 5 qui s'enchaînent sur un même flux). Je ne comprends pas très bien pourquoi ça rame alors que le script précédent est bien plus complexe...

Je me suis aperçu, par exemple, que mes feuilles de style étaient en indent="true" ; je suis passé d'un fichier intermédiaire de 40Mo à 12.5Mo en le passant à "false", mais les performances ne se sont pas améliorées (elles se sont même un peu dégradées, pour tout dire).

Voici le code :
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
 
<xsl:template match="node()">
	<xsl:param name="parentRef" select="0" />
	<xsl:variable name="pos"><xsl:number level="any" count="*[local-name()!='val' and not(@ref) and not(@reference)]" /></xsl:variable>
 
	<xsl:copy>
		<!-- l'attribut @class doit apparaître en première position -->
		<xsl:copy-of select="@class" />
		<!-- ajout d'un attribut @id séquenciel -->
		<xsl:if test="local-name()!='val' and not(@ref) and not(@reference)">
			<xsl:attribute name="id"><xsl:value-of select="$pos - 1" /></xsl:attribute>
		</xsl:if>
		<!-- l'attribut @parent sera remplacé par un noeud ci-dessous -->
		<xsl:copy-of select="@*[local-name()!='class' and local-name()!='parent']" />
 
 
		<xsl:if test="local-name()='md'">
			<xsl:element name="po">
				<xsl:attribute name="class">p</xsl:attribute>
				<xsl:attribute name="ref"><xsl:value-of select="$parentRef" /></xsl:attribute>
			</xsl:element>
		</xsl:if>
 
		<!-- un certain ordre doit être respecté pour les balises -->
		<xsl:apply-templates select="vi|dc|md|t">
			<xsl:with-param name="parentRef"><xsl:value-of select="$pos - 1" /></xsl:with-param>
		</xsl:apply-templates>
 
		<xsl:if test="@parent">
			<xsl:element name="pa">
				<xsl:attribute name="ref"><xsl:value-of select="$parentRef" /></xsl:attribute>
			</xsl:element>
		</xsl:if>
 
		<xsl:apply-templates select="*[local-name()!='vi' and local-name()!='dc' and local-name()!='md' and local-name()!='t']">
			<xsl:with-param name="parentRef"><xsl:value-of select="$pos - 1" /></xsl:with-param>
		</xsl:apply-templates>
	</xsl:copy>
 
	<xsl:if test="local-name()='vp'">
		<xsl:element name="vc">
			<xsl:attribute name="class">V</xsl:attribute>
			<xsl:attribute name="ref"><xsl:value-of select="$pos - 1" /></xsl:attribute>
		</xsl:element>
	</xsl:if>
</xsl:template>
Est-ce que quelqu'un voit des choses qui pourraient être améliorées au niveau des expressions xPath ? Dois-je remplacer mes tests par des sous-templates ??
Merci d'avance pour vos remarques.