#android #performance #retrofit2 #android-networking #android-viewpager2
Вопрос:
Скажем, я собираюсь загрузить две таблицы данных с веб-сервера, categories
и items
:
data class Category(val id: Long)
data class Item(val id: Long, val name: String, val categoryId: Long)
Затем заполните данные в ViewPager2
и TabLayout
, как показано ниже:
У меня есть две стратегии для этого:
Стратегия 1: Запросите все данные сразу, реорганизуйте данные по коду (фильтрация, сортировка…), затем передайте соответствующие данные ( items
) на каждую страницу Fragment
.
Стратегия 2: Запрашивайте соответствующие данные для каждой страницы (по categoryId
), что означает, что веб-сервер будет выполнять фильтрацию и сортировку, и каждый Fragment
запрашивает свои данные индивидуально.
Какая стратегия лучше? Заранее спасибо.
Ответ №1:
Лучше субъективно — это очень сильно зависит от данных, которые вы собираетесь получить, и показателей, которые важны для ваших пользователей.
Если у вас есть небольшой объем данных, то извлеките их все одним вызовом api и разделите на устройстве — об этом гораздо проще думать и намного проще кодировать. Вероятно, это также будет быстрее написать, поэтому, если вы хотите быстро выпустить что-то, это, вероятно, лучший подход.
Однако, если вы попытаетесь получить все это сразу, но при этом будет большой объем данных, то ваши пользователи будут тратить много времени на просмотр загрузочного счетчика! В этом случае я бы извлекал данные, когда пользователь запрашивает каждый список.
Если вы хорошо спроектируете api своего веб — сервера, вы можете сделать так, чтобы одна и та же конечная точка api решала оба подхода, т. Е. Параметры фильтрации/сортировки могут быть необязательными. Это позволит вам создать и выпустить подход с одним вызовом (не передавая никаких параметров конечной точке api и просто получая все данные), а затем, если этого недостаточно, вы можете выпустить другую версию своего приложения, которая выполняет фильтрацию на стороне сервера.