我开始对穴居人进行网络请求配置文件分析,发现一些应该是3s左右的API却花了大约8s。在周围散布了许多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
似乎客户在responseHeadersStart
和responseHeadersEnd
之间花费了大约7 s。但是,当我在同一网络上的Mac上运行相同的查询时,该请求得到2.03s。
为什么差异如此之大,我可以做些什么来使移动设备更快地运行吗?我尝试了other questions like this的建议,但我已经在这里做了所有提及。
我曾在低端的小米Redmi3S上尝试过此操作,但随后我在更快的设备小米Mi6上重复了测试,讽刺的是,该测试的运行速度慢了1秒! Mobile APK是使用proguard在发布模式下编译的,因此我先构建,运行,然后使用grep提取日志,以避免增加设备的运行速度。 OkHttp3版本是3.12.1。有什么想法吗?
答案 0 :(得分:0)
原来,问题出在标题上。在计算机上完成的请求与客户端上的请求略有不同。复制所有标头字段可在pc和移动设备上提供相同的性能。