Почему okhttp3 на Android медленнее выполняет запросы, чем настольный компьютер? - PullRequest
0 голосов
/ 24 января 2019

Я запустил код сетевого запроса профилирования 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.Есть идеи?

1 Ответ

0 голосов
/ 25 января 2019

Оказывается, проблема была с заголовками. Запросы, выполняемые на компьютере, немного отличались от запросов на клиенте. Репликация всех полей заголовка обеспечивает одинаковую производительность как для ПК, так и для мобильных устройств.

...