循环使用Jsoup connect()。第一个请求总是比其他所有后续请求都慢很多]]

问题描述 投票:5回答:3

我正在创建一个小型应用,以测量HTML文档加载所需的时间,每隔x秒检查一次。

我正在循环中使用jsoup:

    Connection.Response response = null;

    for (int i = 0; i < totalGets; i++) {
        long startTime = System.currentTimeMillis();

        try {
            response = Jsoup.connect(url)
                    .userAgent(USER_AGENT)  //just using a Firefox user-agent
                    .timeout(30_000)
                    .execute();
        } catch (IOException e) {
            if (e.getMessage().contains("connect timed out")) {
                System.out.println("Request timed out after 30 seconds!");
            }
        }

        long currentTime = System.currentTimeMillis();

        System.out.println("Response time: " + (currentTime - startTime) + "ms" + "\tResponse code: " + response.statusCode());

        sleep(2000);
    }

我遇到的问题是,无论在哪个网站上,jsoup连接的首次执行总是比随后的所有连接都慢。

这是我在https://www.google.com上的输出

Response time: 934ms    Response code: 200
Response time: 149ms    Response code: 200
Response time: 122ms    Response code: 200
Response time: 136ms    Response code: 200
Response time: 128ms    Response code: 200

这是我在http://stackoverflow.com上看到的内容>

Response time: 440ms    Response code: 200
Response time: 182ms    Response code: 200
Response time: 187ms    Response code: 200
Response time: 193ms    Response code: 200
Response time: 185ms    Response code: 200

为什么第一次连接后总是总是更快?有没有更好的方法来确定文档的加载速度?

我正在创建一个小型应用,以测量HTML文档加载所需的时间,每隔x秒检查一次。我在循环中使用jsoup:Connection.Response response = null;为(int ...

java jsoup document
3个回答
3
投票

1。

在可以发出第一个请求之前,Jsoup必须运行一些样板代码。我不会将第一个请求计入您的度量中,因为所有的初始化都会使第一个请求时间有所偏差。

3
投票

我认为除了@luksch点之外,还有另一个因素,我认为Java 使连接保持活动状态


0
投票

另一个潜在的原因是JVM在后台进行JIT优化,这将Java字节代码转换为本地指令以提高速度。

© www.soinside.com 2019 - 2024. All rights reserved.