Насколько я понимаю, после загрузки документа в Jsoup с использованием Jsoup.parse()
синтаксический анализ не требуется снова, поскольку аккуратно иерархическое дерево готово для использования программистом.
Но что я не уверен, является ли выбор верхнего уровня () более дорогостоящим, чем выбор внутреннего уровня ().
Например, если у нас есть <p>
, спрятанный внутри множества вложенных <div>
, а родитель этого <p>
уже доступен в программе, будет ли какая-либо разница в производительности между:
document.select("p.pclass")
а также
pImediateParent.select("p.pclass")
?
Как это работает в Jsoup?
ОБНОВЛЕНИЕ: На основании приведенного ниже ответа я понимаю, что и document.select()
, и pImediateParent.select()
используют тот же самый статический метод, только с другим корнем в качестве второго параметра:
public Elements select(String query) {
return Selector.select(query, this);
}
Что переводится в:
/**
* Find elements matching selector.
*
* @param query CSS selector
* @param root root element to descend into
* @return matching elements, empty if not
*/
public static Elements select(String query, Element root) {
return new Selector(query, root).select();
}
Я не удивлен, но теперь вопрос в том, как это query
работает? Итерирует ли он поиск запрошенного элемента? Это запрос произвольного доступа (как в хеш-таблице)?