【问题标题】:Why is okhttp3 on android slower doing requests than a desktop computer?为什么 android 上的 okhttp3 执行请求比台式计算机慢?
【发布时间】:2019-06-18 13:13:57
【问题描述】:

我开始穴居人分析网络请求代码,发现一些应该大约 3 秒的 API 却花了大约 8 秒。在散布了很多println() 之后,我到达了介于两者之间的点:

mOkHttpClient.newCall(request).enqueue(okcallback);

public void onResponse(Call call, okhttp3.Response response) {
    System.out.println("GGGN in 1");

中间经过了 7 秒,这表明 okhttp3 是罪魁祸首。在阅读了其他一些答案后,我偶然发现了Events wiki page,其中包含一个EventListener 示例,用于调试http 管道中的事件。这是输出:

18:36:54.389 GGGH 0007 https://someurl/
18:36:54.390 GGGH 0007 0,000 callStart
18:36:54.390 GGGN 5
18:36:54.392 GGGH 0007 0,002 connectionAcquired
18:36:54.392 GGGH 0007 0,002 requestHeadersStart
18:36:54.392 GGGH 0007 0,003 requestHeadersEnd
18:36:54.392 GGGH 0007 0,003 requestBodyStart
18:36:54.393 GGGH 0007 0,003 requestBodyEnd
18:36:54.393 GGGH 0007 0,003 responseHeadersStart
18:37:01.680 GGGH 0007 7,291 responseHeadersEnd
18:37:01.681 GGGH 0007 7,291 responseBodyStart
18:37:01.682 GGGN in 1
18:37:01.682 GGGN in 2
18:37:01.683 GGGN in 3
18:37:01.683 GGGQuery 2
18:37:01.688 GGGQuery 3
18:37:01.689 GGGN in 4
18:37:01.689 GGG callback 4
18:37:01.690 GGG callback 5
18:37:01.715 GGG callback 6
18:37:01.715 GGGH 0007 7,325 responseBodyEnd
18:37:01.715 GGGH 0007 7,326 connectionReleased
18:37:01.715 GGGH 0007 7,326 callEnd

似乎客户端在responseHeadersStartresponseHeadersEnd 之间花费了大约7s。但是,当我从同一网络上的 mac 运行相同的查询时,我得到 2.03 秒的请求。

为什么差异如此之大,我可以做点什么让手机跑得更快吗?我尝试了other questions like this 的建议,但我已经完成了那里提到的所有内容。

我在低端的小米 Redmi3S 上尝试了这个,但后来我在更快的设备小米 Mi6 上重复了测试,具有讽刺意味的是,那里的测试运行速度慢了 1 秒!移动 APK 是使用 proguard 在发布模式下编译的,所以我构建、运行,然后使用 grep 获取日志,以避免给设备添加任何减速。 OkHttp3 版本是 3.12.1。有什么想法吗?

【问题讨论】:

    标签: android https okhttp3


    【解决方案1】:

    原来问题出在标题上。在计算机上完成的请求与客户端上的请求略有不同。复制所有标头字段在 PC 和移动设备上提供相同的性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 2011-03-30
      • 2020-03-18
      • 2011-03-02
      • 1970-01-01
      相关资源
      最近更新 更多