我的理解是,一旦文档加载到 Jsoup 中,使用 Jsoup.parse(), ,不需要再次解析,因为整齐的分层树已准备好供程序员使用。

但我不确定顶级 select() 是否比内层 select() 成本更高。

例如,如果我们有一个 <p> 埋藏在许多嵌套中 <div>s,那 <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 工作?它会迭代查找查询的元素吗?它是随机访问(如哈希表)查询吗?

有帮助吗?

解决方案

是的,如果使用中间父级,速度会更快。如果你检查 Jsoup 源代码,你会发现 Element#select() 实际上代表 Selector#select() 方法与 Element 本身作为第二个参数。现在,该方法的 javadoc 说:

选择

public static Elements select(String query, Element root)

查找与选择器匹配的元素。

参数:

  • 查询 - CSS 选择器
  • root - 要下降到的根元素

返回:

匹配元素,如果不匹配则为空

请注意以下说明 root 范围。所以是的,这肯定会有所不同。并不令人震惊,但有 一些 不同之处。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top