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

标签 java html-parsing jsoup

我的理解是,一旦文档加载到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/

相关文章:

java - 无法从另一个对象中获取对象中的值(java处理)

javascript - 在 JavaScript 中将字符串解析为 HTML

android - Jsoup 从 CSS 中选择元素

java - 使用 Jsoup.parse 时如何保持换行?

java - JSoup字符编码问题

java - 用java实现比较器

java - 构建最佳折线

java - 如何通过 JMS API 设置 MQMD ApplicationID 字段?

php - 正则表达式去除字符串中的外部 HTML 标签

c# - 在 C# 中从 URL 中删除 anchor