我的理解是,一旦使用Jsoup.parse()
将文档加载到Jsoup中,就不需要再次进行解析,因为整齐的分层树已准备好供程序员使用。
但我不确定顶层select()是否比内层select()更昂贵。
例如,如果我们将<p>
隐藏在许多嵌套<div>
内,且<p>
的父级已在程序中可用,那么是否有之间的性能差异:
document.select("p.pclass")
和
pImediateParent.select("p.pclass")
这在Jsoup中如何运作?
更新:根据以下答案,我了解document.select()
和pImediateParent.select()
都使用same exact static method,只是使用不同的根作为第二个参数:
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
如何运作?是否迭代查找查询元素?它是随机访问(如在哈希表中)查询吗?
答案 0 :(得分:1)
是的,如果你使用中间父母,它会更快。如果您检查Jsoup源代码,您会看到Element#select()
实际上委托Selector#select()
方法,Element
本身作为第二个参数。现在,该方法的javadoc说:
选择
public static Elements select(String query, Element root)
查找匹配选择器的元素。
参数:
- query - CSS selector
- root - root元素下降到
返回:
匹配元素,如果不是
则为空
请注意root
参数的说明。所以是的,它肯定会有所不同。并不令人震惊,但存在一些的差异。