我的印象是 Jsoup 的 API 中最昂贵的方法是parse()。
但我刚刚发现Document.html()可能会更慢。
鉴于这是(即这是在Document
解析之后)的输出,我觉得这令人惊讶。parse()
为什么Document.html()
这么慢?
我的印象是 Jsoup 的 API 中最昂贵的方法是parse()。
但我刚刚发现Document.html()可能会更慢。
鉴于这是(即这是在Document
解析之后)的输出,我觉得这令人惊讶。parse()
为什么Document.html()
这么慢?
自己回答。Element.html()方法实现为:
public String html() {
StringBuilder accum = new StringBuilder();
html(accum);
return accum.toString().trim();
}
使用 StringBuilder 代替 String 已经是一件好事了,使用StringBuilder.toString()
andString.trim()
可能无法解释 的慢Document.html()
,即使对于比较大的文档也是如此。
但是在中间,我们的方法调用了一个重载版本,Element.html(StringBuilder)
它循环遍历文档中的所有子节点:
private void html(StringBuilder accum) {
for (Node node : childNodes)
node.outerHtml(accum);
}
因此,如果文档包含很多子节点,它会很慢。
看看是否可以更快地实现这一点会很有趣。
例如,如果Jsoup存储通过Jsoup.parse()
. 当然,作为一种选择,以保持向后兼容性和内存占用小。