OKHttp HEAD请求-优化速度

时间:2019-01-28 14:01:09

标签: android okhttp3

我需要构建一个URL Head服务,以尽快提供任何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,在正常情况下我显然不会这样做。但是,对于简单的HEAD请求,380ms的响应时间似乎是极端的。在单元测试和仪器测试中,结果都是相同的。

我尝试使用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 :(得分:0)

答案是不要将OKHttp用于此类请求。

我在Java URL上编写了Kotlin扩展函数,它的速度是后者的两倍。