Répondre moi-même. La méthode Element.html() est mis en œuvre:
public String html() {
StringBuilder accum = new StringBuilder();
html(accum);
return accum.toString().trim();
}
En utilisant StringBuilder au lieu de chaîne est déjà une bonne chose, et l'utilisation de StringBuilder.toString()
et String.trim()
ne peut pas expliquer la lenteur de Document.html()
, même pour un document relativement important.
Mais au milieu, notre méthode appelle une version surchargée, Element.html(StringBuilder)
qui fait une boucle par tous les nœuds enfants dans le document:
private void html(StringBuilder accum) {
for (Node node : childNodes)
node.outerHtml(accum);
}
Ainsi, si le document contient beaucoup de nœuds enfants, il sera être lente .
Il serait intéressant de voir s'il pourrait y avoir une implémentation plus rapide de ceci.
Par exemple, si Jsoup stocke une version en cache de la première html qui a été fourni via Jsoup.parse()
. En option, bien sûr, pour maintenir la rétrocompatibilité et la petite empreinte dans la mémoire.