Что-то, с чем я сталкиваюсь в проекте, над которым я работаю, у меня есть одностраничное приложение . Я обрабатываю браузерную навигационную маршрутизацию на стороне клиента , которая позволяет мне динамически импортировать некоторые модули при совпадении маршрута. Мои настройки маршрутизации выглядят примерно так:
router.setRoutes([
{
path: '/',
component: 'app-main', // statically loaded
},
{
path: '/posts',
component: 'app-posts',
action: () => { import('./app-posts.js').catch(() => Router.go('/offline');} // dynamically loaded
},
{
path: '/offline', network
component: 'app-offline', // also statically loaded
}
]);
А вот простое изображение приложения для ясности:
Я кэширую оболочку приложения в моем сервисном работнике, что означает, что страница main
и страница offline
прекэшируются, а страница posts
должна кэшироваться во время выполнения (после запроса, так что еслипользователь нажимает на ссылку posts
)
Итак, мои кэши манифеста до кеширования: main.js
, offline.js
, а мои index.html
.
Где я сталкиваюсь с ударом:
- Пользователь теряет сетевое подключение
- Пользователь пытается перейти на страницу
posts
- . Динамический импорт для этого может завершиться ошибкой, если он не был запрошен икэшированный ранее (и пользователь будет перенаправлен на страницу
offline
)
Но когда мой пользователь снова получает сетевое подключение, щелкает ссылку posts
, динамический импорт все равно не будет выполнен;Я предполагаю, потому что браузер дедуплицирует динамический импорт.
Это очень позорно, потому что мой пользователь подключен к сети;этот запрос должен быть успешным! Единственный способ понять, как с этим справиться, - это перезагрузить страницу и снова запросить страницу posts
.
Итак, мой вопрос, как мне поступить?