OKHttp HEAD Requests - Оптимизация для скорости - PullRequest
0 голосов
/ 28 января 2019

Мне нужно создать службу URL-заголовков, которая доставит все заголовки для любого URL-адреса как можно быстрее.

Я написал модульные и инструментальные тесты, чтобы увидеть, сможет ли OKHttp сделать этодля меня.

Вот тест

class GetHeadersTest {
    @Test
    fun GetHeaders() {
        val startTime: Long = System.currentTimeMillis()
        println("START: ${startTime}")
        val testHeaderURL = "https://s3-eu-west-1.amazonaws.com/somefolder/image37.jpg"
        println("URL VARIABLE: ${System.currentTimeMillis() - startTime}ms")

        val client = OkHttpClient()
        val clientTime = System.currentTimeMillis() - startTime
        println("OK HTTP CLIENT: ${clientTime}ms")

        val request = Request.Builder().url(testHeaderURL).head().build()
        val requestTime = System.currentTimeMillis() - startTime
        println("OK HTTP REQUEST: ${requestTime}ms")

        val response = client.newCall(request).execute()
        val responseTime = System.currentTimeMillis() - startTime
        println("OK HTTP RESPONSE: ${responseTime}ms: $response")

        println("END: ${System.currentTimeMillis()}")
    }
}

Результаты весьма удивительны для меня, происходящие из мира браузеров.

START: 1548683216245
URL VARIABLE: 0ms
OK HTTP CLIENT: 357ms
OK HTTP REQUEST: 370ms
OK HTTP RESPONSE: 750ms: Response{protocol=http/1.1, code=200, message=OK, url=https://s3-eu-west-1.amazonaws.com/somefolder/image37.jpg}
END: 1548683216995

Я создаю новый OkHttpClient в каждом запросе, что я, очевидно, не сделал бы в обычных обстоятельствах.Однако время отклика 380 мс для простого запроса HEAD кажется чрезмерным.Результаты одинаковы в модульных и инструментальных тестах.

Я пробовал с http, и результаты были следующими

START: 1548683574373
URL VARIABLE: 0ms
OK HTTP CLIENT: 338ms
OK HTTP REQUEST: 350ms
OK HTTP RESPONSE: 508ms: Response{protocol=http/1.1, code=200, message=OK, url=http://s3-eu-west-1.amazonaws.com/somefolder/image37.jpg}
END: 1548683574881

Хотя этот подход довольно бесполезен, так как большинство URL-адресов в наши дни - https,время приближается к тому, что я ожидал бы для запроса HTTPS HEAD.

Итак, вопрос - как я могу сделать это быстрее?Кажется, что время соединения SSL очень медленное по сравнению с миром браузеров.Поскольку это запрос HEAD, могу ли я ослабить условия SSL и игнорировать любые ответы?

Является ли OKHttp неправильным пакетом для выполнения запросов HEAD?Должен ли я идти прямо к URLConnection?

Любой совет от кого-либо высоко ценится.

1 Ответ

0 голосов
/ 11 февраля 2019

Ответ - не используйте OKHttp для такого рода запросов.

Вместо этого я написал функцию расширения Kotlin для java URL, и она была в два раза быстрее.

...