Использование: Java 1.5/JDOM 1.1.3/Jaxen 1.1.1Когда JDOM XPATH быстрее, чем поиск элементов с помощью getChildren?
тест я написал в том, чтобы подтвердить предположение, что с помощью прекомпилированного XPATH в JDOM было быстрее, чем перебор дочерних элементов. Вместо этого я обнаружил, что XPATH находится между 4 и 5 раз медленнее, чем повторение списков дочерних элементов, выполнение сравнения строк и поиск желаемого.
Для контекста, мой XPath это что-то вроде:
/root/quote/vehicle[@id = 'some vehicle']/coverage[@id = 'some coverage']/code";
И фактическая оценка приурочено (в Try/поймать блок):
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,013ms и .002ms.
Оба подходят к очень короткому времени работы, учитывая достаточно длительный тест.
XPath для меня легче писать, однако маршрут getChild выглядит более гибким, но немного подробным. Тем не менее, это профессия, которую я не против делать за скорость. Это также верно, что даже 100 итераций невероятно быстро, так что это может быть академическим ...
В конце концов, я хотел бы знать:
Есть сценарий, где JDOM Xpath быстрее, чем альтернативный стиль показано?
Какие преимущества дает JDom XPath (в любой версии Java/JDOM)?
Вы уже ответили на свои вопросы , – skaffman
Я надеялся получить комментарии от авторитета по этому вопросу :) Я относительно новичок в JDOM. – JHarnach
Эффект jaxen, кажется, регрессировал на протяжении многих лет –