汤普:顶级 select() 与普通 select() 的性能比较内层 select()
-
27-10-2019 - |
题
我的理解是,一旦文档加载到 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
范围。所以是的,这肯定会有所不同。并不令人震惊,但有 一些 不同之处。
不隶属于 StackOverflow