Я хочу сравнить производительность для трех реализаций, упомянутых в названии, я написал небольшую программу JAVA, чтобы помочь мне в этом. Основной метод содержит три блока тестирования, каждый блок выглядит следующим образом:
nb=0; time=0;
for (int i = 0; i < 7; i++) {
double v = methodX(url);
if(v>0){
nb++;
time+=v;
}
}
if(nb==0) nb=1;
System.out.println("HttpClient : "+(time/ ((double) nb))+". Tries "+nb+"/7");
Переменная nb
используется, чтобы избежать неудачных запросов. Теперь метод methodX
является одним из:
private static double testWithNativeHUC(String url){
try {
HttpURLConnection httpURLConnection= (HttpURLConnection) new URL(url).openConnection();
httpURLConnection.addRequestProperty("User-Agent", UA);
long before = System.currentTimeMillis();
BufferedReader bufferedReader= new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
while (bufferedReader.readLine()!=null);
return System.currentTimeMillis()-before;
} catch (IOException e) {
e.printStackTrace();
return -1;
}
}
private static double testWithHC(String url) {
try {
CloseableHttpClient httpClient = HttpClientBuilder.create().setUserAgent(UA).build();
BasicResponseHandler basicResponseHandler = new BasicResponseHandler();
long before = System.currentTimeMillis();
CloseableHttpResponse response = httpClient.execute(new HttpGet(url));
basicResponseHandler.handleResponse(response);
return System.currentTimeMillis() - before;
} catch (IOException e) {
e.printStackTrace();
return -1;
}
}
private static double testWithJsoup(String url){
try{
long before = System.currentTimeMillis();
Jsoup.connect(url).execute().parse();
return System.currentTimeMillis()-before;
}catch (IOException e){
e.printStackTrace();
return -1;
}
}
В качестве вывода я получаю следующее.
для URL https://stackoverflow.com
:
HttpUrlConnection : 325.85714285714283. Tries 7/7
HttpClient : 299.0. Tries 7/7
Jsoup : 172.42857142857142. Tries 7/7
для url https://online.vfsglobal.dz
:
HttpUrlConnection : 104.57142857142857. Tries 7/7
HttpClient : 181.0. Tries 7/7
Jsoup : 57.857142857142854. Tries 7/7
для URL https://google.com/
:
HttpUrlConnection : 251.28571428571428. Tries 7/7
HttpClient : 259.57142857142856. Tries 7/7
Jsoup : 299.85714285714283. Tries 7/7
для URL https://algeria.blsspainvisa.com/book_appointment.php
:
HttpUrlConnection : 112.57142857142857. Tries 7/7
HttpClient : 194.85714285714286. Tries 7/7
Jsoup : 67.42857142857143. Tries 7/7
для URL https://tunisia.blsspainvisa.com/book_appointment.php
:
HttpUrlConnection : 439.2857142857143. Tries 7/7
HttpClient : 283.42857142857144. Tries 7/7
Jsoup : 144.71428571428572. Tries 7/7
Даже повторяющиеся тесты дают одинаковые результаты, я не использовал время ожидания между запросами для получения быстрых результатов, полагаю, это не оказывает большого влияния на результаты.
РЕДАКТИРОВАТЬ Фактически я проанализировал источники Jsoup, показывает, что он использует HttpURLConnection с BufferedInputStream, я пытался использовать оба метода HttpURLConnection, но, как вы можете видеть, эти же результаты очевидны, и Jsoup выглядит как заметно быстрее, чем HttpURLConnection и использует HttpURLConnection!
Заранее спасибо,