Как запретить загрузке всего пользовательского хранилища данных при загрузке приложения - PullRequest
0 голосов
/ 27 апреля 2019

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

Интересно то, что, если я отключаю интернет-соединение с устройством, загружаю приложение и затем включаю соединение, приложение все равно работает нормально (по-видимому, без чтения документа из процесса инициализации приложения, поскольку они поступают из кеша) .

По сути, желаемое поведение - приложение, которое инициализирует локальные данные, а затем синхронизирует только обновления, сделанные пользователем, на сервере firebase.

class _MyAppState extends State<MyApp> {
    final store = new Store<AppState>(
    appReducer,
    initialState:  new AppState(isLoading: true, logs: []),
    middleware: [thunkMiddleware]);


    initState(){
        super.initState();
        loadData();
      }

   loadData(){
        FirebaseAuth.instance.currentUser().then( (loggedInUser) async {
          if(loggedInUser==null){
            store.dispatch(SetUser(null));
          }
          QuerySnapshot logsQuery = await Firestore.instance.collection("/users/"+loggedInUser.uid+"/logs").getDocuments();
          List<Log> logs = [];
          final logDocs = logsQuery.documents;
          for (DocumentSnapshot logDoc in logDocs) {
            logs.add(Log.fromFireStoreData(logDoc.documentID, logDoc.data));
          }
          store.dispatch(SetUserLogs(logs));
        }
      }
...
    }

1 Ответ

0 голосов
/ 28 апреля 2019

Я бы сказал, что проблема даже не в избыточности или постоянстве хранилища, поскольку не хватает информации (Работает ли без избыточности? Как вы получаете эти данные? Покажите нам немного кода) inпост, на который я постараюсь ответить как есть, но вы должны уточнить немного.

Очень важно отметить, что есть БОЛЬШАЯ ПРОБЛЕМА , если у вас есть 800+ чтений из практически чего-либоничто в любом приложении не может удаленно генерировать 800 операций чтения заранее.

Прежде всего, вам нужно оптимизировать этот запрос пользовательских данных и, вероятно, структуру базы данных для данных, для которых я рекомендую посмотреть это видео с официального канала Firebase на YouTube и чтение этой статьи в документации Firebase о ценах и этого на лучшие практики.Будьте очень осторожны с тем, как вы обрабатываете данные с этого момента, и если это не решит вашу проблему, объясните больше в вашей ветке.

...