Um Ihre Frage zu beantworten, warum ist es langsam:
Dies ist rein, weil Htmlunit viele Dinge gehen dagegen hat:
- Es ist läuft in einer kompilierten Sprache, die nicht viele native Optimierungen von Browsern wie FireFox hat.
- Es erfordert wohlgeformtes XML im Gegensatz zu HTML (nicht-strikt), was bedeutet, dass es das HTML in XML konvertieren muss.
- Dann muss es das JavaScript über einen Parser ausführen, beheben Sie alle Probleme mit dem Code, und verarbeiten Sie das in Java selbst.
- Auch als @Arya darauf hingewiesen, fordert es Dinge einzeln, so viele Javascript-Dateien führen zu einer Verlangsamung, viele Bilder führen zu einer Verlangsamung.
Um Ihre Frage zu beantworten, wie es zu beschleunigen:
Als allgemeine Regel, die ich zu deaktivieren (es sei denn, sie benötigt werden):
- JavaScript
- Bilder
- CSS
- Applets.
Ich habe auch den Quellcode und entfernt die ActiveX-Unterstützung und neu kompiliert. Wenn Sie verhindern möchten, dass der Code diese zusätzlichen Seiten lädt, können Sie den folgenden Code verwenden, um eine Antwort zu geben, ohne sie aus dem Internet herunterzuladen.
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());
}
}
});
Andere Dinge, die ich habe bemerkt:
- Htmlunit ist Thread nicht sicher was bedeutet, dass Sie wahrscheinlich ein neues für jeden Thread erstellen soll.
- Htmlunit zwischenspeichert tatsächlich die Seiten
FF verwendet GPU-Beschleunigung, um [Teile von] Seiten zu rendern. – Blender
@Blender Ist es möglich, die Seite in htmlUnit zu beschleunigen? HtmlPage page1 = webClient.getPage (URL); – muthu