Справочная информация:
Я создаю PWA (одностраничное приложение) SPA (Progressive Web App), используя Vue. js. У меня есть удаленная PostgreSQL база данных, обслуживающая таблицы по HTTP с помощью PostgREST. У меня есть рабочий Workbox Service Worker и IndexedDB, которые содержат локальную копию таблиц базы данных. Я также зарегистрировал несколько маршрутов в моем service-worker.js; пока все в порядке ....
Я позволяю кэшу Workbox GET-вызовы, которые возвращают таблицы из службы REST. Например: https://www.example.com/api/customers вернет объект json клиентов.
workbox.routing.registerRoute('https://www.example.com/api/customers', workbox.strategies.staleWhileRevalidate())
На этом этапе мне нужно, чтобы Workbox выполнил шаблон stale-while-revalidate, но до:
- Не использовать кеш, а вместо этого вернуть локальную версию этой таблицы, которую я сохранил в IndexedDB. (часть кэша)
- Выполните вызов REST и обновите локальную версию, если она изменилась. (сетевая часть)
Я почти уверен, что в этой стратегии рабочего ящика нет настраиваемой опции для этого. Поэтому я написал бы код для этого, который должен быть довольно простым. Извлечение кеша просто для возврата содержимого запрошенной таблицы из IndexedDB. Для части обновления я думаю добавить номер версии данных для сравнения. И, таким образом, решите, нужно ли мне обновлять локальную базу данных.
В любом случае, сейчас мы приближаемся к актуальному вопросу:
Вопрос:
Действительно ли это хороший способ использования маршрутов / кэширования Workbox, или я сейчас неправильно использую технологию, потому что я использую IndexedDB в качестве кеша?
и
Как я могу сделать свою собственную версию стратегия StaleWhileRevalidate
? Я был бы рад понять, как просто сделать копию существующей версии Workbox и иметь возможность импортировать ее и использовать в моем Vue. js Service Worker. Оттуда я могу внести свои собственные необходимые изменения кода.
Чтобы немного проще ответить на этот вопрос, это основные подвопросы:
- Прежде всего,
StaleWhileRevalidate.ts
(см. ссылку ниже) является файлом .ts (TypeScript?). Могу (должен) я просто импортировать это как модуль? Я, вероятно, могу. но затем я получаю ошибки: - Когда я импортирую свой пользовательский файл CustomStaleWhileRevalidate.ts в свой main. js, я получаю ошибки во всех текущих операторах импорта, потому что (конечно) каталог
workbox-core/_private/
не не существует.
Как к этому подойти?
Это текущая реализация на Github: https://github.com/GoogleChrome/workbox/blob/master/packages/workbox-strategies/src/StaleWhileRevalidate.ts