в оффлайн-режиме.
Поясню - приложение получает от бэка данные, юзер имеет возможность с ними работать, даже в случае если он с планшетом оказался в зоне где нет связи(например, в лифте). И как только соединение восстановилось, все изменения сделанные в оффлайне должны синхронизироваться с бэком и не потеряться.
Есть несколько не очень понятных мне моментов, которые хотелось бы уточнить:
1) Данные от бэка нужно кэшировать на клиенте. Пока склоняюсь к IndexedDB. Подойдет ли она к этой задаче, или есть что-то более оптимальное?
2) Нужно динамически отлавливать статус соединения. Достаточно ли здесь будет navigator.onLine? Пока натыкался на противоречивую информацию, что этому свойству не стоит доверять. А из альтернатив пока представляется раз в N секунд делать xhr, но мне это кажется не очень хорошим решением.
3) Как правильно организовать механизм актуализации данных в оффлайне? Создавать некое временное хранилище изменений в памяти, и по восстановлению соединения пушить это в IDB/бэкенд?
4) Данные могут изменяться так же внешними системами, а приложение должно их своевременно актуализировать. Пока я представляю это так, что бэк через eventSource будет пушить во фронт обновления, а клиент на них подписывается и обновляет данные в IDB -> отрисовывает на UI изменения.
p.s. извиняюсь если вопросы глупые, ранее похожих задач не решал. Если что-то неясно сформулировал - уточню.
по поводу onLine не подскажу, но по поводу сохранения данных на фронте, действительно можно использовать indexeddb, с плагином dexie. А обновление данных после подключение можно организовать отлавливая ошибки в interceptors (axios), и ложа нужные запросы в массив, который после подключения будет последовательно отправлено
Про dexie тоже почитал, выглядит интересно + вроде даже есть поддержка observables. По обновлению получается, что нужно будет проверять, если запрос прошел(соединение восстановилось) то следом нужно еще отправить "отложенные" (запросы если таковые были)?
да, но должен сказать что indexeddb не самая удобная штука (судя по моему опыту) у вас может быть по другому, так как у всех задачи разные
я пока однозначно не могу сказать, т.к. ее ранее не юзал. Пока сделал миниверсию просто с хранением/получением данных из нее, вроде работает. Сейчас хочу с нативного апи на декси перейти, разбираюсь с доками
Обсуждают сегодня