Время загрузки страницы веб-сайта Scrapinghub/Splash экспоненциально увеличивается с помощью parellel thread
В моем испытании я ударил экземпляр-заставку с 50 параллельными потоками. Каждый поток получит страницу источника URL. Значение слотов по умолчанию для моего экземпляра-заставки равно 50. Здесь время выборки сайта увеличивается экспоненциально с увеличением количества параллельных потоков. Я могу получить идеальный источник HTML для 50 URL. Но время увеличивается с 2 до 45 секунд с 1-го URL-адреса до 50-го соответственно. Пожалуйста, помогите мне сократить время загрузки исходной страницы.
Мой пример кода Java
public class SplashThread implements Runnable {
private static final String splash ="http://localhost:8050/execute";
private String script = URLEncoder.encode("function main(splash, args) \n" +
"splash:go(args.url)\n"+
" splash.images_enabled = false\n" +
" splash:on_request(function(request)\n" +
" if string.find(request.url, \".css\")~= nil then\n" +
" request.abort()\n" +
" end\n" +
"end)\n" +
"local html = splash:html()\n" +
"return html\n"+
"end","UTF-8");
private String url =null;
public SplashThread(String url) throws UnsupportedEncodingException {
this.url = url;
}
@Override
public void run() {
HttpClientUtil clientUtil =null;
JSONObject json =null;
try {
Properties queryParms = new Properties();
queryParms.put("url",url);
queryParms.put("timeout","85.0");
queryParms.put("lua_source",script);
clientUtil = new HttpClientUtil(-1,false);
HttpResponse response = clientUtil.doGet(splash,queryParms,null);
String resp = ScrapyUtil.getResponseString(response,"UTF-8");
}
catch (Exception e){
e.printStackTrace();
System.out.println("JSN}ON :: "+json);
}
finally {
if(clientUtil!=null){
try {
clientUtil.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
Я планирую 50 потоков этого работоспособного объекта с ScheduledExecutorService.
Если я покажу источник страницы один за другим, он будет работать отлично. Но мне нужно действовать одновременно.