Jsoup:顶级select()与内层select()的性能

时间:2011-10-19 23:43:13

标签: java html-parsing jsoup

我的理解是,一旦使用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);
}

哪个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如何运作?是否迭代查找查询元素?它是随机访问(如在哈希表中)查询吗?

1 个答案:

答案 0 :(得分:1)

是的,如果你使用中间父母,它会更快。如果您检查Jsoup源代码,您会看到Element#select()实际上委托Selector#select()方法,Element本身作为第二个参数。现在,该方法的javadoc说:

  

选择

public static Elements select(String query, Element root)
     

查找匹配选择器的元素。

     

参数:

     
      
  • query - CSS selector
  •   
  • root - root元素下降到
  •   
     

返回:

     

匹配元素,如果不是

则为空

请注意root参数的说明。所以是的,它肯定会有所不同。并不令人震惊,但存在一些的差异。