Будучи новичком в firestore, я стараюсь, чтобы количество загрузок документов было как можно меньше. Я понял, что могу загрузить документы только один раз и хранить их в автономном режиме. Если что-то изменилось в облаке, загрузите новую копию и замените автономную версию этого документа (дайте соответствующим документам отметку времени последнего изменения и загрузите, когда локальная версия станет старше). Я еще не начал с этого, но я предполагаю, что что-то подобное уже должно существовать, верно?
Я не знаю, с чего начать, и Google не дает мне много ответов, за исключением enablePersistence() из экземпляра FirebaseFirestore
. У меня такое чувство, что это не то, что я ищу, поскольку было бы странно искусственно включать и выключать сеть каждый раз, когда я хочу проверить изменения.
Я что-то упустил или собираюсь найти оптимизационное решение этой проблемы?
То, что вы описываете, не встроено в Firestore. Вам придется спроектировать и построить его, используя возможности Firestore, которые вы прочитали в документации. Постоянство включено по умолчанию, но это не решит вашу проблему, о которой здесь довольно широко сказано.
Суть в том, что ни Firestore, ни его локальный кеш не понимают оптимизации загрузки только документов, которые были изменены, независимо от того, какое определение «изменения» вы выберете. Когда вы запрашиваете Firestore, он по умолчанию всегда обращается к серверу и загружает полный набор документов, соответствующих вашему запросу. Если вы хотите запросить только локальный кеш, вы также можете это сделать, но он не будет консультироваться с сервером и не будет знать о каких-либо изменениях. Этих возможностей недостаточно для описанных вами оптимизаций.
Если вы хотите получить только изменения документа с момента последнего запроса, вам придется спроектировать свои данные так, чтобы вы могли сделать такой запрос, возможно, добавив поле метки времени в каждый документ и используя его для запроса для документы, которые изменились с момента последнего запроса. Вам также может понадобиться управлять собственным локальным кешем, поскольку локальный кеш SDK может быть недостаточно гибким для того, что вам нужно.
Я рекомендую вам прочитать этот пост в блоге, в котором более подробно описывается, как на самом деле работает локальный кеш, и как вы можете использовать его (или нет).