0

XSLT の最適化を行っているときに、親ノードのルックアップを回避することで、XSLT の実行時間が 1 時間から約 20 秒に短縮されることがわかりました。

関連するパラメーターを渡して必要な決定を下し、パフォーマンスを向上させることで、xsl行の下を回避しました。

<xsl:if test="parent::node() = /test">
...
</xsl:if>

私は saxon8.jar ライブラリを使用して、SAX ベースの XML 解析を使用する XSLT を実行しています。

SAX はプッシュ ベースであるため、参照を戻すにはコストがかかることを理解しています。しかし、コストとここに含まれるアルゴリズムについて、もう少し洞察を得たいと思います。

また、私の XSL では、実行のさまざまなステップで Xpath を使用して同じフォワード ノードを何度も参照しています。では、なぜこれが親ノードの参照のようにボトルネックにならなかったのでしょうか?

4

2 に答える 2

0

祖先の数をテストします。あなたがやっているようなノード比較は、ツリー内のすべてを比較しています。第 2 レベルのノードにのみ関心がある場合 (ツリー全体が別のツリーと等しいことには関心がない場合)、次のようなものを期待します。

<xsl:when test="count(ancestor::node()) = 2"/>

または多分より良いパフォーマンスは

<xsl:when test="count(parent::node() | /test = 1)"/>

のほうがいい。私の推測です。

于 2013-10-23T06:45:21.580 に答える