我的理解是,一旦文档加载到Jsoup中,使用Jsoup.parse()
,不需要再次解析,因为整齐的层次树已准备好供程序员使用。
但是我不确定顶级 select() 是否比内层 select() 成本更高。
例如,如果我们有 <p>
埋在许多嵌套中<div>
s,那<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);
}
哪个translates into :
/**
* 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
是怎么做到的?工作?它会迭代查找查询的元素吗?它是随机访问(如哈希表)查询吗?
最佳答案
是的,如果使用中间父级,速度会更快。如果你检查 Jsoup 源代码,你会看到 Element#select()
实际上代表Selector#select()
方法,将 Element
本身作为第二个参数。现在,该方法的 javadoc 说:
select
public static Elements select(String query, Element root)
Find elements matching selector.
Parameters:
- query - CSS selector
- root - root element to descend into
Returns:
matching elements, empty if not
注意root
参数的描述。所以是的,这肯定会有所不同。并不令人震惊,但有一些差异。
关于java - Jsoup:顶级 select() 与内层 select() 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7829555/