Угловое PWA автономное хранилище - PullRequest
1 голос
/ 21 июня 2019

Я создаю новое веб-приложение, которое должно работать без проблем, даже если нет подключения к Интернету.Я выбрал Angular и собираю PWA, так как он поставляется со встроенной функциональностью, чтобы приложение работало в автономном режиме.До сих пор у меня есть сервисный работник, который отлично работает и управляется файлом манифеста, это очень хорошо кеширует статический контент, и я настроил его на кеширование множества запросов API, которые я хочу использовать, пока приложение не подключено.

В дополнение к этому я использовал localStorage для хранения попыток вызывать, отправлять и удалять запросы API, когда пользователь находится в автономном режиме.Как только интернет-соединение восстановлено, запросы, хранящиеся в localStorage, отправляются на сервер.

Насколько мне известно, пользователь может получать доступ к контенту в автономном режиме, редактировать данные и синхронизировать данные ссервер после восстановления интернет-соединения пользователя.Вот где начинается мое затруднение.Работник службы автоматически кэширует данные запроса API, как это определено в файле манифеста, и существует отдельное хранилище данных для редактирования данных в автономном режиме.Это приводит к ситуации, когда пользователь редактирует некоторые данные, сохраняет данные, обновляет страницу, и данные обслуживаются кэшированным API сервисного работника.

Существует ли встроенный механизм для обновления данных API, автоматически кэшируемых работником службы?Мне не нравится пытаться снять это вручную, потому что это кажется хакерским, и я не могу себе представить, что это будет доказательством будущего по мере развития сервисных работников.

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

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

Спасибо

1 Ответ

0 голосов
/ 24 июня 2019

У меня есть проект, в котором мои пользователи могут редактировать локальные данные, когда они находятся в автономном режиме, и я использую Cloud Firestore, чтобы кэшировать локальную базу данных. Если я вас правильно понял, это было бы именно вашим требованием.

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

firebase.firestore().enablePersistence() 
  .catch(function(err) {
      // log the error
  });

// Subsequent queries will use persistence, if it was enabled successfully

Если использовать эту базу данных NoSQL для вас, я бы с ней согласился, в противном случае вам нужно самостоятельно выполнять локальные обновления, поскольку для этого нет встроенного решения.

...