2011-07-13 13 views
3

実行のパフォーマンスを測定した人は誰ですか? 相当 同様 XSL変換はさまざまなライブラリを繰り返し使用していますか?私はJavaライブラリに最も興味がありますが、他の提案も大歓迎です。XSLT反復または再帰のパフォーマンス

(有効、 //*はおそらく、例えばかなりの数の要素を一致しますが、XSLTの「精神」を「true」ではないというを想定し を与えられた)の反復の例:

<xsl:for-each select="//*[position() &lt;= string-length(MyData/MyValue)]"> 
    <someTags> 
    <xsl:value-of select="substring(MyData/MyValue, position(), 1)"/> 
    </someTags> 
</xsl:for-each> 

例再帰(純粋な、しかし、同じタスクのための非常に冗長)のために:

<xsl:template match="data/node"> 
    <xsl:call-template name="for-each-character">      
    <xsl:with-param name="data" select="."/> 
    </xsl:call-template> 
</xsl:template> 

<xsl:template name="for-each-character">     
    <xsl:param name="data"/> 
    <xsl:if test="string-length($data) &gt; 0"> 
    <someTags>        
     <xsl:value-of select="substring($data,1,1)"/> 
    </someTags> 
    <xsl:call-template name="for-each-character"> 
     <xsl:with-param name="data" select="substring($data,2)"/> 
    </xsl:call-template> 
    </xsl:if> 
</xsl:template> 

どちらの例も、この質問から採取した。

XSLT for each letter in a string

:スタックオーバーフローは、XSLTと初心者が正しくXSLTを学ぶことの純度について白熱した議論のための場所である傾向があります。私は "純度"の冗長性、またはむしろ主観的な "純度"についてはあまり気にしませんが、ここでのパフォーマンスは本当に不思議です。

+0

に答えるかもしれない、私はそれを読んでどこで見つけることができれば、名前付きテンプレートは、一般的にパフォーマンスにわずかに悪化している、表示されます。 – Treemonkey

+0

しかし、再帰自体はどうですか?実装は大きなスタックを維持する必要があります。すべてのスタックレベルのコンテキスト内の変数の数に応じて、これは非常に多くを意味する可能性があります。 –

+0

あなたはおそらく私にこれを言うための純粋主義者と呼ぶでしょうが、パフォーマンスはほぼ正しさの副次的考察でなければなりません。上記の反復の例は、明らかに早期に終了する可能性が非常に高いです。誤った結果をより速く得ることは、遅い正しい結果よりも優れていると見なされるべきではありません。 – Flynn1179

答えて

1

これは私がしばらく前に同様の質問をし、あなたの質問ルーカス

https://stackoverflow.com/questions/506348/how-do-i-know-my-xsl-is-efficient-and-beautiful

+0

素晴らしい、それは良い答えと異なる視点の非常に良いリストのようです!ありがとう! –

+0

dimitre novatchevには、実際に興味深いものがあるブログ(http://dnovatchev.wordpress.com/)があります。確かにその情報もあります:) – Treemonkey

+0

ええ、知っておきたい。彼は私がStack Overflowで見たことから、純粋主義者のマスターです。たぶん私は改宗されるつもりです:D –

関連する問題