なぜ遅いのかという質問に答えるには:
これは純粋に、HTMLUnitがそれに反する多くのことを持っているためです。
- これは、FireFoxなどのブラウザのネイティブ最適化の多くを持たないコンパイル言語で実行されています。
- HTML(非厳密)とは対照的に、整形式のXMLが必要です。つまり、HTMLをXMLに変換する必要があります。
- 次に、パーサーを介してJavaScriptを実行し、コードの問題を修正してから、Java自体の内部で処理する必要があります。
- また、@ Aryaが指摘したように、一度に1つずつリクエストするため、JavaScriptファイルが多いと速度が低下し、画像が多いと速度が低下します。
それをスピードアップする方法についてのあなたの質問に答えるには:
原則として、私は無効にします(それらが必要でない限り):
また、ソースコードを入手し、ActiveXサポートを削除して、再コンパイルしました。コードがこれらの余分なページをロードしないようにしたい場合は、以下のコードを使用して、Webからダウンロードせずに応答を返すことができます。
WebClient browser;
browser.setWebConnection(new WebConnectionWrapper(browser) {
@Override
public WebResponse getResponse(final WebRequest request) throws IOException {
if (/* Perform a test here */) {
return super.getResponse(request); // Pass the responsibility up.
} else {
/* Give the program a response, but leave it empty. */
return new StringWebResponse("", request.getUrl());
}
}
});
私が気づいた他のこと:
- HTMLUnitはスレッドセーフではないため、スレッドごとに新しいものを作成する必要があります。
- HTMLUnitは実際にページをキャッシュします