Перейти к содержанию

07 — Оффлайн-режим: что доступно без сети и объёмы данных

Детализация требований CLI-3…CLI-5 и NFR-3. Определяет, что именно синхронизируется на устройство, что догружается по правилам, а что работает только онлайн — с оценкой объёмов.

Обещание оффлайна (что гарантируем пользователю)

  • Клиент: назначенная тренировка открывается без сети всегда; записываются веса, повторы, результаты, ПМ и комментарии; работает таймер. GIF/видео — если успели закэшироваться (см. уровни ниже), иначе плейсхолдер — функциональность не ломается.
  • Тренер: конструктор работает без сети — создание, редактирование, копирование тренировок на основе полной текстовой базы упражнений (метаданные синхронизированы всегда, медиа — по мере необходимости).
  • Все оффлайн-изменения синхронизируются автоматически при появлении сети (CLI-5), включая отложенную отправку видео от клиента (VID-3, этап 2).

Три уровня данных

Уровень 1 — всегда на устройстве (полная синхронизация)

Структурированные данные — лёгкие, синхронизируются целиком через PowerSync:

Данные Оценка объёма
Метаданные всей базы упражнений (~1 500 шт.: названия RU/EN, инструкции, мышцы, оборудование, связи замен/прогрессий) ~5–10 МБ
Программы, тренировки, результаты пользователя (клиент — свои; тренер — своих клиентов) < 5 МБ за год активного использования
Профили, ПМ, история показателей, комментарии, шаблоны тренера < 5 МБ
Итого уровень 1 ~10–20 МБ — незаметно для пользователя

Вывод: вся текстовая часть продукта оффлайн всегда, для любого объёма клиентов тренера. Ограничивать нужно только медиа.

Уровень 2 — prefetch по правилам (упреждающая загрузка медиа)

Медиа, которое понадобится с высокой вероятностью, качается заранее, пока есть сеть:

  • GIF упражнений из назначенных тренировок на ближайшие 7–14 дней (клиент) — тренировки известны заранее, это и есть главный оффлайн-сценарий.
  • Видео тренера, привязанные к назначенным тренировкам (этап 2) — по настройке «загружать только по Wi-Fi».
Сценарий Оценка
Неделя тренировок клиента: ~5 тренировок × ~10 упражнений = ~50 GIF × 0,3–1 МБ (360×360) ~15–50 МБ
Видео тренера к неделе тренировок (если есть): 2–3 ролика × 30–100 МБ ~60–300 МБ — только по Wi-Fi, по настройке

Уровень 3 — только онлайн (+ кэш после просмотра)

  • Свободный браузинг всей медиабазы упражнений (GIF грузятся на лету, просмотренные остаются в LRU-кэше).
  • Стриминг видео тренера вне prefetch-окна.
  • Лидерборды, публичные страницы, платежи, загрузка новых видео.

Почему не «вся база оффлайн»

Вариант Объём Вердикт
Вся база GIF 360×360 (~1 400 шт.) ~0,5–1,5 ГБ ❌ Недопустимо как дефолт
Вся база GIF 180×180 ~300–500 МБ ⚠️ Как дефолт — нет; допустимо как опция для тренера: «Скачать базу целиком» (по Wi-Fi), для работы в залах без связи
Метаданные + prefetch назначенного ~30–70 МБ ✅ Дефолт

Правила кэша

  • Лимит медиакэша по умолчанию: 500 МБ, вытеснение LRU; размер настраивается в приложении.
  • Prefetch — только по Wi-Fi по умолчанию (настройка: «и по мобильной сети»).
  • Очередь исходящих: результаты/комментарии (лёгкие — уходят сразу при появлении сети), видео клиента (тяжёлые — по Wi-Fi, с индикатором «ожидает отправки»).

Следствия для реализации

  1. Sync-правила PowerSync (bucket'ы): уровень 1 описывается декларативно — «клиент видит свои назначения», «тренер видит своих клиентов». Медиа в PowerSync не синхронизируется вообще — только URL; загрузкой управляет отдельный media-cache-слой приложения.
  2. Оценки объёмов проверяются на сэмпле EDB (30 бесплатных GIF — реальные размеры файлов) в рамках спайка №1 из 06 — Технологический стек.
  3. Дизайнеру: состояния «GIF ещё не загружен» (плейсхолдер со схемой/названием), «видео ожидает Wi-Fi», «результат ожидает синхронизации» — обязательные состояния UI, а не крайние случаи.