4

我的印象是 Jsoup 的 API 中最昂贵的方法是parse()

但我刚刚发现Document.html()可能会更慢。

鉴于这是(即这是Document解析之后)的输出,我觉得这令人惊讶。parse()

为什么Document.html()这么慢?

4

1 回答 1

7

自己回答。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(). 当然,作为一种选择,以保持向后兼容性和内存占用小。

于 2012-07-04T04:16:02.170 回答