Сервисные работники могут кэшировать / предварительно кэшировать ответ на данный запрос.Допустим, у вас есть Library
база данных MySQL на сервере, содержащая таблицы типа Books
и Authors
.Чтобы кэшировать его с помощью сервисного работника, вы можете создать сервис, который возвращает книги и авторов в формате JSON, например, GET https://you-api.com/library
.Затем, в зависимости от вашей стратегии кэширования, вы можете либо:
В любом случае вы можете сохранить результат в Cache
или IndexedDB
.Я бы предпочел IndexedDB
, так как мы должны иметь возможность удобно работать с этими данными позже.С IndexedDB вы можете создать несколько хранилищ, если решите хранить записи таблицы MySQL отдельно.
ОК, мы создали и заполнили нашу локальную базу данных.И что теперь?
Вы можете либо:
- Запросить локальную
Library
базу данных прямо со своей страницы, либо - Продолжать использовать сервисных работников
Давайте сосредоточимся на втором варианте.Ваше приложение, скорее всего, использует некоторые службы для извлечения данных из удаленной базы данных.Допустим, сервис https://you-api.com/library/book/<id>
используется для получения книги по идентификатору.Почему бы не воспользоваться тем фактом, что у нас есть книги, кэшированные локально?Наиболее простой подход заключается в следующем:
- Перехватить запрос на выборку, соответствующий указанному выше URL-адресу, с использованием работника службы выше
- Считать имя таблицы и идентификатор книги из URL-адреса запроса
- Запрос локальной базы данных
Library
для этой конкретной книги и возврат ее в том же формате, что и удаленная служба
Некоторые дополнительные соображения и примеры:
- Дескрипторслучай, когда локальная база данных отсутствует
- Решите, когда и как база данных будет обновлена
- Работа с изменениями схемы
- При необходимости используйте первую стратегию сети.Попытка сначала извлечь записи базы данных из удаленной службы и перейти к кэшированной версии, когда сеть недоступна