Per rispondere alla tua domanda sul perché è lento:
questo è puramente perché HtmlUnit ha molte cose in corso contro di essa:
- E ' in esecuzione in un linguaggio compilato che non ha molte ottimizzazioni native di browser come FireFox.
- Richiede XML ben formato anziché HTML (non rigido), il che significa che deve convertire l'HTML in XML.
- Quindi deve eseguire il JavaScript tramite un parser, correggere eventuali problemi con il codice, quindi elaborarlo all'interno di Java stesso.
- Anche come @Arya ha sottolineato, richiede le cose una alla volta, quindi molti file javascript risulteranno in un rallentamento, molte immagini si tradurranno in un rallentamento.
Per rispondere alla domanda su come accelerarlo:
Come regola generale a disattivare (a meno che non sono necessari):
- JavaScript
- Immagini
- CSS
- Applet.
Ho anche ricevuto il codice sorgente e rimosso il supporto ActiveX e ricompilato. Se vuoi impedire al codice di caricare quelle pagine extra puoi usare il codice qui sotto per dare una risposta senza scaricarlo dal 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());
}
}
});
Altre cose che ho notato:
- HtmlUnit non è thread senso di sicurezza che probabilmente si dovrebbe crearne uno nuovo per ogni thread.
- HtmlUnit realtà non memorizza nella cache le pagine
FF utilizza l'accelerazione GPU per il rendering di [parti di] pagine. – Blender
@Blender È possibile velocizzare la pagina get in htmlUnit? HtmlPage page1 = webClient.getPage (url); – muthu