Мне нужно создать службу 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
?
Любой совет от кого-либо высоко ценится.