2012-07-03 147 views

回答

7

回答我自己。該Element.html()方法是這樣實現的:

public String html() { 
    StringBuilder accum = new StringBuilder(); 
    html(accum); 
    return accum.toString().trim(); 
} 

使用StringBuilder的,而不是字符串已經是一件好事,而且使用的StringBuilder.toString()String.trim()可能無法解釋的Document.html()緩慢,即使是較大的文件。

但在中間,我們的方法調用的重載版本,Element.html(StringBuilder)它通過文檔中的所有子節點循環:

private void html(StringBuilder accum) { 
    for (Node node : childNodes) 
    node.outerHtml(accum); 
} 

因此,如果文檔中包含大量的子節點,它是緩慢的。

看看是否可以更快地實現這一點會很有趣。

例如,如果Jsoup存儲緩存版本,將其通過Jsoup.parse()提供給它的原始HTML的。作爲一個選項,當然,要保持向後兼容性和內存佔用小。