【发布时间】:2012-05-22 06:07:09
【问题描述】:
使用: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 次迭代后最为一致。
第一个示例大约在 0.29 毫秒 +- 0.01 毫秒内完成。
第二个示例在 0.013 毫秒到 0.002 毫秒之间完成。
只要测试足够长,两者的运行时间都非常短。
对我来说,XPath 更容易编写,但是 getChild 路由似乎更灵活但有点冗长。尽管如此,我不介意为了速度而进行交易。这也是事实,即使 100 次迭代也非常快,所以这可能是学术性的......
最后我想知道:
是否存在 JDOM Xpath 比显示的替代样式更快的情况?
JDom XPath(在任何版本的 Java/JDOM 中)带来什么好处?
【问题讨论】:
-
您已经回答了自己的问题。
-
我希望得到有关该主题的权威的 cmets :) 我对 JDOM 比较陌生。
-
jaxen 这些年的表现好像倒退了