Может ли Service Service Worker предварительно кэшировать базу данных MySQL? - PullRequest
0 голосов
/ 02 марта 2019

У меня есть PWA, в котором работают работники сферы обслуживания.Он может предварительно кэшировать URL-адреса и ресурсы, которые я нахожу очень полезными, особенно после того, как я перенес его в TWA и опубликовал в Play Store.

База данных MySQL, к которой она подключается, довольно легкая - около 6 МБ.

Можно ли предварительно кэшировать всю базу данных с помощью моего Service Worker или можно только предварительно кэшировать URL / статические активы?

1 Ответ

0 голосов
/ 02 марта 2019

Сервисные работники могут кэшировать / предварительно кэшировать ответ на данный запрос.Допустим, у вас есть Library база данных MySQL на сервере, содержащая таблицы типа Books и Authors.Чтобы кэшировать его с помощью сервисного работника, вы можете создать сервис, который возвращает книги и авторов в формате JSON, например, GET https://you-api.com/library.Затем, в зависимости от вашей стратегии кэширования, вы можете либо:

  • Добавить https://you-api.com/library URL-адрес в список предварительно кэшированных ресурсов, используемых на шаге install работника службы, либо
  • Обработка работника службы fetch событие, соответствующее запросу https://you-api.com/library.

В любом случае вы можете сохранить результат в Cache или IndexedDB.Я бы предпочел IndexedDB, так как мы должны иметь возможность удобно работать с этими данными позже.С IndexedDB вы можете создать несколько хранилищ, если решите хранить записи таблицы MySQL отдельно.

ОК, мы создали и заполнили нашу локальную базу данных.И что теперь?

Вы можете либо:

  • Запросить локальную Library базу данных прямо со своей страницы, либо
  • Продолжать использовать сервисных работников

Давайте сосредоточимся на втором варианте.Ваше приложение, скорее всего, использует некоторые службы для извлечения данных из удаленной базы данных.Допустим, сервис https://you-api.com/library/book/<id> используется для получения книги по идентификатору.Почему бы не воспользоваться тем фактом, что у нас есть книги, кэшированные локально?Наиболее простой подход заключается в следующем:

  • Перехватить запрос на выборку, соответствующий указанному выше URL-адресу, с использованием работника службы выше
  • Считать имя таблицы и идентификатор книги из URL-адреса запроса
  • Запрос локальной базы данных Library для этой конкретной книги и возврат ее в том же формате, что и удаленная служба

Некоторые дополнительные соображения и примеры:

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