Время загрузки страницы веб-сайта 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.

Если я покажу источник страницы один за другим, он будет работать отлично. Но мне нужно действовать одновременно.

0 ответов

Другие вопросы по тегам