4
我的印象是Jsoup的API中最昂貴的方法是parse()。我發現Document.html()可能會更慢。Document.html()爲什麼這麼慢?
鑑於Document
是parse()
輸出(即這是後解析),我覺得這是令人驚訝的。
爲什麼Document.html()
這麼慢?
我的印象是Jsoup的API中最昂貴的方法是parse()。我發現Document.html()可能會更慢。Document.html()爲什麼這麼慢?
鑑於Document
是parse()
輸出(即這是後解析),我覺得這是令人驚訝的。
爲什麼Document.html()
這麼慢?
回答我自己。該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的。作爲一個選項,當然,要保持向後兼容性和內存佔用小。