Узкое место множественных запросов в Firebase - PullRequest
0 голосов
/ 27 мая 2018

У меня есть ViewPager, который содержит 2 разных фрагмента.В обоих фрагментах я пытаюсь запросить базу данных firebase с addValueEventListener.Вот ссылка -

public static DatabaseReference getDatabase() {
    if (mDatabase == null) {
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);
        mDatabase = FirebaseDatabase.getInstance().getReference();

    }
    return mDatabase;
}

В первом Fragment есть что-то вроде 500+ элементов (для загрузки требуется около 8 секунд), а во втором - около 20-30.Проблема в том, что второй фрагмент всегда ждет завершения первого, а затем запрашивает второй.Есть ли способ, которым я могу отделиться или что-то сделать с этим?Мне действительно нужно второе Fragment, чтобы загрузиться быстрее.Заранее спасибо.

1 Ответ

0 голосов
/ 27 мая 2018

Если бы мне пришлось решать эту проблему, я бы подумал, что общая ситуация немного отличается от предложенной @Mark в комментариях.Я бы реализовал нумерованный запрос в Firebase, чтобы мне не приходилось получать все 500+ строк одновременно.

Кроме того, я хотел бы сохранить автономное хранилище данных, которые извлекаются из Firebase.Таким образом, каждый раз, когда приложение загружается, данные заполняются обоими фрагментами, которые были извлечены ранее.Я выполняю запрос в фоновом режиме асинхронно, и пользователю не нужно будет ждать завершения запроса, чтобы увидеть данные в обоих фрагментах.Как только запрос завершит загрузку, я обновлю представления соответствующим образом с новыми данными, а также обновлю локальный кеш, который будет необходим для обслуживания данных при следующем запуске приложения.

Если вы не заинтересованы в загрузке данных в фоновом режиме и отображении начальных элементов из кэша и придерживаетесь своей текущей реализации, то я хотел бы предложить вам управлять всеми этими вещами из действия, которое содержитViewPager.Просто выполняйте запросы один за другим или асинхронно и публикуйте результаты во фрагменты после получения результатов от Firebase, используя BroadcastReceiver или что-то в этом роде.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...