Java Jsoup:顶级select()与内部select()的性能
我的理解是,一旦使用Java Jsoup:顶级select()与内部select()的性能,java,html-parsing,jsoup,Java,Html Parsing,Jsoup,我的理解是,一旦使用Jsoup.parse()将文档加载到Jsoup中,就不再需要解析了,因为一个整洁的层次结构树已经准备好供程序员使用 但我不确定顶级select()是否比内部级别select()更昂贵 例如,如果我们有一个埋在许多嵌套的中,并且该的父级已在程序中可用,那么以下各项之间是否会有性能差异: document.select("p.pclass") 及 ? 这在Jsoup中是如何工作的 更新:根据下面的答案,我了解document.select()和pImediateParent.
Jsoup.parse()
将文档加载到Jsoup中,就不再需要解析了,因为一个整洁的层次结构树已经准备好供程序员使用
但我不确定顶级select()是否比内部级别select()更昂贵
例如,如果我们有一个
埋在许多嵌套的
中,并且该
的父级已在程序中可用,那么以下各项之间是否会有性能差异:
document.select("p.pclass")
及
?
这在Jsoup中是如何工作的
更新:根据下面的答案,我了解document.select()
和pImediateParent.select()
都使用,只是使用不同的根作为第二个参数:
public Elements select(String query) {
return Selector.select(query, this);
}
其中:
我并不感到惊讶,但现在的问题是
query
如何工作?它是否迭代以查找查询的元素?这是一个随机访问(如在哈希表中)查询吗?是的,如果使用中间父查询,速度会更快。如果您检查Jsoup源代码,您将看到实际上将元素本身作为第二个参数委托给该方法。现在,该方法的javadoc表示:
选择
查找与选择器匹配的元素
参数:
- 查询-CSS选择器
- 根-要下降到的根元素
返回:
匹配元素,如果不匹配则为空
请注意root
参数的说明。所以是的,这肯定会有所不同。这并不令人震惊,但有一些不同。是的,如果使用中间父级,速度会更快。如果您检查Jsoup源代码,您将看到实际上将元素本身作为第二个参数委托给该方法。现在,该方法的javadoc表示:
选择
查找与选择器匹配的元素
参数:
- 查询-CSS选择器
- 根-要下降到的根元素
返回:
匹配元素,如果不匹配则为空
请注意root
参数的说明。所以是的,这肯定会有所不同。这并不令人震惊,但有一些不同。谢谢!我更新了上面的问题,添加了对源代码的引用。现在的问题是如何“缓存”中间父级。如果它将在循环中多次用作查询的根(而不是将文档用作根),这实际上可以提高性能,对吗?是的,但这是一个微提升,而不是一个大提升。或者您必须遍历一个大于10MB的超大HTML文档。测量(分析)是知道的。谢谢!我更新了上面的问题,添加了对源代码的引用。现在的问题是如何“缓存”中间父级。如果它将在循环中多次用作查询的根(而不是将文档用作根),这实际上可以提高性能,对吗?是的,但这是一个微提升,而不是一个大提升。或者您必须遍历一个大于10MB的超大HTML文档。测量(分析)就是了解。
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();
}
public static Elements select(String query, Element root)