実行のパフォーマンスを測定した人は誰ですか?
相当
同様 XSL変換はさまざまなライブラリを繰り返し使用していますか?私はJavaライブラリに最も興味がありますが、他の提案も大歓迎です。XSLT反復または再帰のパフォーマンス
(有効、
は
を与えられた)の反復の例://*
はおそらく、例えばかなりの数の要素を一致しますが、XSLTの「精神」を「true」ではないというを想定し
<xsl:for-each select="//*[position() <= 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) > 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を学ぶことの純度について白熱した議論のための場所である傾向があります。私は "純度"の冗長性、またはむしろ主観的な "純度"についてはあまり気にしませんが、ここでのパフォーマンスは本当に不思議です。
に答えるかもしれない、私はそれを読んでどこで見つけることができれば、名前付きテンプレートは、一般的にパフォーマンスにわずかに悪化している、表示されます。 – Treemonkey
しかし、再帰自体はどうですか?実装は大きなスタックを維持する必要があります。すべてのスタックレベルのコンテキスト内の変数の数に応じて、これは非常に多くを意味する可能性があります。 –
あなたはおそらく私にこれを言うための純粋主義者と呼ぶでしょうが、パフォーマンスはほぼ正しさの副次的考察でなければなりません。上記の反復の例は、明らかに早期に終了する可能性が非常に高いです。誤った結果をより速く得ることは、遅い正しい結果よりも優れていると見なされるべきではありません。 – Flynn1179