使用: 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 の任意のバージョン) はどのような利点をもたらしますか?