Я запустил код сетевого запроса профилирования Caveman и обнаружил, что некоторые API, которые должны быть около 3 с, взяли около 8 с.После рассеяния большого количества println()
вокруг я достиг точки, где между:
mOkHttpClient.newCall(request).enqueue(okcallback);
и
public void onResponse(Call call, okhttp3.Response response) {
System.out.println("GGGN in 1");
7 секунд прошло, предполагая, что okhttp3 является виновником.Прочитав некоторые другие ответы, я наткнулся на вики-страницу Events , которая содержит пример 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
Кажется, что клиент тратит около 7 секунд между responseHeadersStart
и responseHeadersEnd
.Однако, когда я выполняю тот же запрос с компьютера Mac в той же сети, я получаю 2,03 секунды для запроса.
Почему разница настолько велика, и я могу что-то сделать, чтобы мобильный телефон работал быстрее?Я попробовал предложения из других вопросов, подобных этому , но я уже делаю все упомянутое там.
Я пробовал это на младшей платформе Xiaomi Redmi3S, но затем я повторил тесты наXiaomi Mi6, более быстрое устройство, и по иронии судьбы тест там работает на 1 секунду медленнее!Mobile APK скомпилирован в режиме релиза с помощью proguard, поэтому я собираю, запускаю, а затем извлекаю логи с помощью grep, чтобы избежать замедления работы устройств.Версия OkHttp3 - 3.12.1.Есть идеи?