1

使用: Java 1.5 / JDom 1.1.3 / Jaxen 1.1.1

私が作成したテストは、JDOM でコンパイル済みの XPATH を使用する方が、子要素を反復処理するよりも高速であるという信念を確認することでした。代わりに、XPATH は、子のリストを反復処理し、文字列を比較し、必要なものを探すよりも 4 倍から 5 倍遅いことがわかりました。

コンテキストとして、私の XPath は次のようなものです。

/root/quote/vehicle[@id = 'some vehicle']/coverage[@id = 'some coverage']/code";

そして、実際の評価のタイミングは (try/catch ブロックで):

String element = path.valueOf(doc).getText();

代替検索は次のとおりです。

List<Element> vehicleList = doc.getRootElement()
                                        .getChild("quote")
                                        .getChildren("vehicle");

for(Element vehElement : vehicleList)
    if(vehElement.getAttributeValue("id").equals("some vehicle")){
        List<Element> coverageList = ele.getChildren("coverage");
        for(Element covElement : coverageList){
            if(covElement.getAttributeValue("id").equals("some coverage")){
                element = covElement.getChild("CoverageType").getText();
                break;
            }
        }
    }

不思議なことに、XPATH を使用したメソッドの実行時間ははるかに遅くなりますが、1000 回以上の反復で最も安定しています。

最初の例は、約 .29 ミリ秒 +- 0.01 ミリ秒で完了します。

2 番目の例は、.013ms から .002ms の間で完了します。

どちらも、十分に長いテストを行うと、非常に短い実行時間に近づきます。

私にとっては、XPath の方が書きやすいですが、getChild ルートの方が柔軟ですが、少し冗長に思えます。それでも、それは私がスピードのために行うことを気にしない取引です. 100回の反復でも信じられないほど高速であることも事実なので、これはアカデミックかもしれません...

最終的に知りたいのは:

JDOM Xpath が示されている代替スタイルよりも高速であるシナリオはありますか?

JDom XPath (Java/JDOM の任意のバージョン) はどのような利点をもたらしますか?

4

1 に答える 1

3

ここで注意すべき点がいくつかあります.... 私は (私は JDOM メンテナーです)、特に XPath 評価のパフォーマンスに関して、JDOM 2.0.1 で広範な作業を行いました。ここにいくつかの数字があります:

http://hunterhacker.github.com/jdom/jdom2/performance.html

下から読んでください。

その他の興味深い数値を次に示します (さまざまな JDOM バージョンとさまざまな Java VM を比較します)。

http://hunterhacker.github.com/jdom/jdom2/performanceJDK.html

「結論」は……。

  • JDOM 2.x では、より高速な反復子が導入されています。Jaxen はIterator を非常に集中的に使用しており、JDOM 2.x でのパフォーマンスの向上はこの点で重要です....
  • Java 7 は、イテレーターのパフォーマンスに関しても、以前のバージョンよりもはるかに高速です。
  • Jaxen XPathを「コンパイル」するメリットはありません....
  • ただし、最良の場合でも、「ネイティブ」な検索方法は XPath バージョンよりも高速です。

最大のパフォーマンス向上は、Java7 で実行してから JDOM 2.x にアップグレードすることで得られます。

ただし、「カスタム」検索は、効率的に記述されていれば、常に XPath よりも高速です。

編集: また、JDOM 2.x では、XPath クエリを実行するための新しい API が導入されています (古い API も引き続き機能しますが) 。機能-XPath-アップグレード

于 2012-05-14T18:34:12.527 に答える