Приложение полностью работает без интернета, используя Service Worker для кэширования и offline-first стратегию.
- Стратегия: Network-first → Cache fallback
- При загрузке страницы пытается взять свежую версию с сервера
- Если сеть недоступна - возвращает закэшированную версию
- Успешные ответы автоматически кэшируются
- Стратегия: Cache-first (с синхронизацией)
- Сначала проверяет наличие данных в кэше
- При наличии - возвращает сразу (быстро)
- При отсутствии - делает запрос и кэширует результат
- Если сеть недоступна и нет в кэше - возвращает ошибку 503
- Автоматически отображается в левом нижнем углу экрана
- Показывает "Offline mode - viewing cached data"
- На основе
navigator.onLineAPI - Исчезает, когда интернет восстановлен
Функции-помощники в src/lib/utils.ts:
isOfflineError(error)- определяет, является ли ошибка offline-ошибкойgetOfflineErrorMessage(operation)- возвращает пользовательское сообщение
Хранит響:
- Результаты
listFiles('topics') - Результаты
listFiles('posts') - Один прочитанный файл (MD контент)
- Метаданные фум
Размер: Зависит от кол-ва загруженных тем/постов
Хранит:
index.htmlsw.js- И другие static assets
window.clearGitHubApiCache()Application → Cache Storage → github-api-cache-v2 / static-cache-v2
Network → Throttling → Offline
или
DevTools → More tools → Network conditions → Offline
| Сценарий | Поведение |
|---|---|
| Открыта уже загруженная страница | Работает нормально (из кэша) |
| Попытка загрузить новые данные | Показывает ошибку "Offline" |
| Интернет вернулся | Приложение автоматически начнёт загружать свежие данные |
| Переход по ссылке при offline | Показывает Outlet с ошибкой-сообщением |
❌ Не работает:
- Загрузка новых топиков/постов при их отсутствии в кэше
- Авторизация (если токен не сохранён)
- Создание новых постов/тем
- Редактирование профиля
- Загрузка новых форумов
✅ Работает:
- Просмотр загруженных топиков
- Просмотр загруженных постов
- Просмотр профилей (если уже загружены)
- Чтение постов и комментариев
- Смена темы (light/dark)
- Смена языка
- Первая загрузка → все данные загружаются и кэшируются
- Повторные посещения → быстрая загрузка из кэша
- Потеря интернета → продолжение работы с кэшированными данными + offline-индикатор
- Восстановление сети → автоматическое обновление при новых запросах
- Очистка кэша → можно сделать вручную через
window.clearGitHubApiCache()
- ✅ Network-first для статики (быстрее)
- ✅ Cache-first для GitHub API (работает offline)
- ✅ Graceful fallback при недоступности сети
- ✅ Обновлены версии кэша (v1 → v2)
- ✅ Добавлен OfflineIndicator компонент
- ✅ Обновлён Layout для отображения offline-статуса
- ✅ Добавлены helper-функции для offline-ошибок
- Токен GitHub хранится в IndexedDB (защищённо)
- Offline-кэш НЕ содержит токен или приватные данные
- Все API запросы требуют валидного токена
- Закэшированные ответы - только публичные данные